SQL - PASAR COLUMNAS A FILAS

 
Vista:

PASAR COLUMNAS A FILAS

Publicado por CHRISTIAN (38 intervenciones) el 28/07/2005 15:28:30
HOLA TENGO LO SIGUIENTE

CLIENTE ITEM
1 A
1 B
1 C
2 A
2 C

Y QUIERO QUE QUEDE

CLIENTE ITEM A ITEM B ITEM C
1 A B C
2 A C

COMO LO HAGO, SIN USAR CURSORES, TIENE QUE SER UNA CONSULTA, O INSERT ENTRE VARIAS TABLAS, PERO SIN CURSORES....

GACIAS
CHRISTIAN
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil

RE:PASAR COLUMNAS A FILAS

Publicado por Liliana (426 intervenciones) el 28/07/2005 17:45:15
Hola Christian,
Acá hay mucha información sobre referencias cruzadas, espero que encuentres
lo que necesitas.
Además un pequeño ejemplo rápido, que no es lo que necesitás porque vos no sabés la cantidad de filas que vas a tener.
Liliana.

CREATE TABLE #test
(codigo char(10),
orden smallint,
valor char(10))

INSERT #test
SELECT 'Codigo 1', 1, 'Valor 1' UNION
SELECT 'Codigo 1', 2, 'Valor 2' UNION
SELECT 'Codigo 1', 3, 'Valor 3' UNION
SELECT 'Codigo 1', 4, 'Valor 4' UNION
SELECT 'Codigo 2', 1, 'Valor 2' UNION
SELECT 'Codigo 2', 2, 'Valor 3' UNION
SELECT 'Codigo 2', 3, 'Valor 4' UNION
SELECT 'Codigo 2', 4, 'Valor 5'

SELECT Codigo,
Columna1 = MAX(CASE Orden WHEN 1 THEN Valor END),
Columna2 = MAX(CASE Orden WHEN 2 THEN Valor ELSE '' END),
Columna3 = MAX(CASE Orden WHEN 3 THEN Valor ELSE '' END),
Columna4 = MAX(CASE Orden WHEN 4 THEN Valor ELSE '' END),
Columna5 = MAX(CASE Orden WHEN 5 THEN Valor ElSE '' END)

FROM #test
GROUP BY Codigo

If you know in advance the number of columns in the result set, try:
http://support.microsoft.com/default.aspx?scid=kb;EN-US;q175574.

If you have a variable number of columns, try:
http://www.sqlmag.com/Articles/Index.cfm?ArticleID=15608

If you want some interesting utilities to do it for you:
http://www.ag-software.com/AGS/xp ags crosstab.asp

RAC at:
http://www.rac4sql.net/onlinehelp.asp?topic=285

Liliana.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:PASAR COLUMNAS A FILAS

Publicado por christian (38 intervenciones) el 29/07/2005 21:18:25
Todavia no esta funcionando como quiero, creo que hay una funcion que invierte mi tabla, alguien que lo sepa....

Saludos
Christian
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

RE:PASAR COLUMNAS A FILAS

Publicado por Liliana (426 intervenciones) el 01/08/2005 20:37:32
Si estás trabajando con MS SQL Server, no tendrás esa función hasta la próxima versión.
Si estás trabajando con Oracle, no lo uso ni conozco, pero he visto que hay una función llamada PIVOT.
Liliana.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:PASAR COLUMNAS A FILAS

Publicado por trazom (8 intervenciones) el 16/08/2005 14:11:26
Para desplegar filas como columnas hay varias formas.
Supongamos que tenemos la siguiente tabla Ventas,

anio periodo valor
---- ------- -----
94 1 100
94 2 150
94 3 170
94 4 200
95 1 190
95 2 210
95 3 205
95 4 215

y la queremos desplegar como

anio P1 P2 P3 P4
---- --- --- --- ---
94 100 150 170 200
95 190 210 205 215

En Oracle podemos utilizar la funcion DECODE de la siguiente forma:

SELECT
anio,
SUM( DECODE( periodo, 1, valor, 0) ) "P1",
SUM( DECODE( periodo, 2, valor, 0) ) "P2",
SUM( DECODE( periodo, 3, valor, 0) ) "P3",
SUM( DECODE( periodo, 4, valor, 0) ) "P4"
FROM Ventas
GROUP BY anio

En cualquier otro manejador, podemos lograr lo mismo con SQL "puro"

SELECT
v1.anio,
SUM( v1.valor) "P1",
SUM( v2.valor) "P2",
SUM( v3.valor) "P3",
SUM( v4.valor) "P4",
FROM Ventas v1,
Ventas v2,
Ventas v3,
Ventas v4
WHERE v1.periodo= 1
AND v2.periodo= 2
AND v3.periodo= 3
AND v4.periodo= 4
AND v1.anio= v2.anio
AND v1.anio= v3.anio
AND v1.anio= v4.anio
GROUP BY v1.anio

Saludos.




Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:PASAR COLUMNAS A FILAS

Publicado por alejandro (1 intervención) el 03/06/2016 15:11:55
Hola sabes como serian esta 2 querys (decode y SQL "puro" sin utilizar pivot ) para hacer la inversa
pasar de

anio P1 P2 P3 P4
---- --- --- --- ---
94 100 150 170 200
95 190 210 205 215

a

anio periodo valor
---- ------- -----
94 1 100
94 2 150
94 3 170
94 4 200
95 1 190
95 2 210
95 3 205
95 4 215

Desde ya gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:PASAR COLUMNAS A FILAS

Publicado por Brunhi (1 intervención) el 25/06/2018 20:52:22
Buenas,


Tengo la misma duda, lograste resolver?

En mi caso tengo una fecha inicio y una fecha fin como columnas y quiero verlas así
orden fecha
1 fecha inicio
2 fecha fin


Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:PASAR COLUMNAS A FILAS

Publicado por Francisco Javier Bordonada (1 intervención) el 30/06/2022 14:40:21
Acabo de resolver algo similar.

CREATE TABLE "EXPORTUSERSYROLES"
( "USUOROL" VARCHAR2(128 BYTE),
"TIPO" VARCHAR2(1 BYTE),
"COMENTARIO" VARCHAR2(128 BYTE) DEFAULT NULL
);

SET DEFINE OFF;
Insert into EXPORTUSERSYROLES (USUOROL,TIPO,COMENTARIO) values ('OTRI','U',null);
Insert into EXPORTUSERSYROLES (USUOROL,TIPO,COMENTARIO) values ('GYDA','U',null);
Insert into EXPORTUSERSYROLES (USUOROL,TIPO,COMENTARIO) values ('EOCARIN','U',null);
Insert into EXPORTUSERSYROLES (USUOROL,TIPO,COMENTARIO) values ('EADMIN','U',null);
Insert into EXPORTUSERSYROLES (USUOROL,TIPO,COMENTARIO) values ('DATUZ','U',null);
Insert into EXPORTUSERSYROLES (USUOROL,TIPO,COMENTARIO) values ('CIENTIA','U',null);
Insert into EXPORTUSERSYROLES (USUOROL,TIPO,COMENTARIO) values ('MONITOR','U',null);
Insert into EXPORTUSERSYROLES (USUOROL,TIPO,COMENTARIO) values ('PERMATUSER','U',null);
Insert into EXPORTUSERSYROLES (USUOROL,TIPO,COMENTARIO) values ('CONNECT','R',null);
Insert into EXPORTUSERSYROLES (USUOROL,TIPO,COMENTARIO) values ('PERMAT','R',null);
Insert into EXPORTUSERSYROLES (USUOROL,TIPO,COMENTARIO) values ('RL_DATUZ','R',null);
Insert into EXPORTUSERSYROLES (USUOROL,TIPO,COMENTARIO) values ('RL_OTRI','R',null);
INSERT INTO EXPORTUSERSYROLES (USUOROL,TIPO,COMENTARIO) VALUES ('RL_PROPIETARIO','R',NULL);


SELECT DISTINCT listagg(USUOROL,';') WITHIN GROUP (ORDER BY USUOROL) OVER (PARTITION BY TIPO) LISTA_NOMBRES
FROM Exportusersyroles ;

/*
LISTA_NOMBRES
--------------------------------------------------
CONNECT;PERMAT;RL_DATUZ;RL_OTRI;RL_PROPIETARIO
CIENTIA;DATUZ;EADMIN;EOCARIN;GYDA;MONITOR;OTRI;PERMATUSER
*/
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Francisco
Val: 150
Ha mantenido su posición en SQL (en relación al último mes)
Gráfica de SQL

RE:PASAR COLUMNAS A FILAS

Publicado por Francisco (60 intervenciones) el 30/06/2022 23:27:45
Usando

1
SELECT UNION ALL

asi

1
2
3
4
5
6
7
SELECT annio, 1 periodo, p1 valor FROM ...
UNION ALL
SELECT annio, 2 periodo, p2 valor FROM ...
UNION ALL
SELECT annio, 3 periodo, p3 valor FROM ...
UNION ALL
SELECT annio, 4 periodo, p4 valor FROM ...


Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar