SQL Server - Columnas a filas

   
Vista:

Columnas a filas

Publicado por dmv (5 intervenciones) el 22/06/2015 18:01:18
Buen dia,

Estoy tratando de transponer de columnas a filas, este es mi caso

Tengo lo siguiente del resultado de una consulta:

Material Day1 Embarque Balance Day2 Embarque Balance
121234 2.65 2.80 3.59 5.63 8.96 10.25

y necesito que se refleje de la siguiente manera:

Material Day1 Day2
121234 2.65 5.63 (representa el primer renglon)
2.80 8.96 (representa el embarque)
3.59 10.25 (representa el balance)

¿Es posible realizar alguna operacion en SQL para que me muestra el resultado como lo que necesito?
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

Columnas a filas

Publicado por Rafael (88 intervenciones) el 23/06/2015 09:16:53
Aqui una idea:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
SELECT Material
     , VAL1
	 , VAL2
FROM   (SELECT Material
             , Day1
             , Embarque1
             , Balance1
             , Day2
             , Embarque2
             , Balance2
        FROM   TABLA) AS T1
UNPIVOT (VAL1 FOR VAL1X IN (Day1, Embarque1, Balance1) ) AS U1
UNPIVOT (VAL2 FOR VAL2X IN (Day2, Embarque2, Balance2) ) AS U1
WHERE LEFT(VAL1X,1) = LEFT(VAL2X,1)

Dependera de la version del SQL Server para ver si tiene o no incorporada la funcionalidad...
De otro modo necesitas tres consultas:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
SELECT Material
	 , Day1
	 , Day2
FROM   TABLA
UNION
SELECT Material
	 , Embarque1
	 , Embarque2
FROM   TABLA
UNION
SELECT Material
	 , Balance1
	 , Balance2
FROM   TABLA
ORDER BY MATERIAL
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

Columnas a filas

Publicado por dmv (5 intervenciones) el 24/06/2015 16:08:48
Gracias Rafael, utilice el metodo de UNION y funcionó.

Tengo otro detalle, tengo una consulta:

SELECT Material,Day1,Day2,(Day1 + Day2) As Balance FROM Tabla

Resultado:

Material Day1 Day2 Balance
7896 5 2 7

Al momento de hacer una UNION con estos valores, hago lo siguiente:

select Material,Day1 from Tabla
UNION
select Material,Day1 from Tabla
UNION
select Material,Day2 from Tabla
UNION
select Material,(Day1 + Day2) AS Balance from Tabla

Resultado:

Material Day1
7896 5 ( corresponde al valor de Day1)
7896 7 ( corresponde al valor de Balance)
7896 2 ( corresponde al valor de Day2)

Como se sabe "Balance" es un campo temporal, y el resultado me lo desordena es decir, en lugar de aparecer el resultado como Day1, Day2, Balance, me aparece el resultado Day1,Balance,Day2 como lo menciono arriba.

¿Hay alguna manera de ordenar el resultado, es decir que me aparesca Day1,Day2,Balance??
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

Columnas a filas

Publicado por Rafael (88 intervenciones) el 25/06/2015 10:44:44
Podrias agregar una columna que te dijera el orden ejemplo:
1
2
3
4
5
6
SELECT MATERIAL, DAY1 AS VALOR, 1 AS ORDEN FROM TABLA
UNION
SELECT MATERIAL, DAY2 AS VALOR, 2 AS ORDEN FROM TABLA
UNION
SELECT MATERIAL, (DAY1 + DAY2) AS VALOR, 3 AS ORDEN FROM TABLA
ORDER BY MATERIAL, ORDEN;


El resultado quedaria tal que asi:
1
2
3
4
5
6
7
*********************************
| MATERIAL  | VALOR     | ORDEN |
*********************************
| 7896      |         5 |     1 |
| 7896      |         2 |     2 |
| 7896      |         7 |     3 |
*********************************
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