Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » SQL Server »

[SOLUCIONADO] Duda para obtener información por PIVOT

Estas en el tema de Duda para obtener información por PIVOT en el foro de SQL Server en Foros del Web. Hola que tal, bueno tengo la siguiente duda. Yo cuento con una tabla la cual tiene de 1 a N columnas y tiene 15 renglones. ...
  #1 (permalink)  
Antiguo 18/06/2014, 18:38
Avatar de drako_darpan  
Fecha de Ingreso: octubre-2008
Ubicación: Sinaloa
Mensajes: 617
Antigüedad: 15 años, 6 meses
Puntos: 58
Duda para obtener información por PIVOT

Hola que tal, bueno tengo la siguiente duda.

Yo cuento con una tabla la cual tiene de 1 a N columnas y tiene 15 renglones.

Como puedo hacer para que las columnas se me hagan los renglones y los números de renglon columnas? Se me ocurria hacerlo por medio del PIVOT, pero leyendo al parecer tendria que hacer campo a campo y pues quisiera que todo fuera de una.

Ejemplo ( Tabla Origen ):

Código SQL:
Ver original
  1. Num.   |   Clase01  |   Clase02  |   Clase03  |   Clase04  |   Clase05  |   Clase06
  2. ---------|--------------|--------------|--------------|--------------|---------------|-----------------
  3.    1      |      1000    |      2000    |     3000    |      4000    |      5000    |      6000
  4.    2      |      7000    |      8000    |     9000    |     10000   |    11000    |    12000

Resultado esperado:

Código SQL:
Ver original
  1. Num.       |       1     |        2
  2. ------------|-----------|-----------------
  3. Clase01  |    1000  |     2000
  4. Clase02  |    3000  |     4000
  5. Clase03  |    5000   |      6000
  6. ...

Como podria hacer para obtener dicha información ya ordenada
__________________
Your Code as a Crime Scene...

Última edición por drako_darpan; 18/06/2014 a las 18:44
  #2 (permalink)  
Antiguo 19/06/2014, 08:07
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Duda para obtener información por PIVOT

con los valores como los tienes no se puede hacer un unpivot en un solo paso tendrias que hacerlo en 2 uno para cada valor, pero si puedes juntar esos 2 querys en uno solo :) quedaria algo como esto:


Código SQL:
Ver original
  1. CREATE TABLE #temp
  2. (
  3. num INT,
  4. clase01 INT,
  5. clase02 INT,
  6. clase03 INT,
  7. clase04 INT,
  8. clase05 INT,
  9. clase06 INT
  10. )
  11.    
  12.    INSERT INTO #temp VALUES (1      ,      1000    ,      2000    ,     3000    ,      4000    ,      5000    ,      6000)
  13.    INSERT INTO #temp VALUES (2      ,      7000    ,      8000    ,     9000    ,     10000   ,    11000    ,    12000)
  14.  
  15.  
  16. SELECT tabla1.numero,tabla1.[1],tabla2.[2] FROM(
  17. SELECT numero,[1]
  18. FROM
  19. (
  20. SELECT * FROM #temp WHERE num=1
  21. ) AS t1
  22. unpivot
  23. (
  24. [1] FOR numero IN (clase01,clase02,clase03,clase04,clase05,clase06)
  25. ) AS t2
  26. ) AS tabla1
  27. LEFT JOIN
  28.  
  29. (SELECT numero,[2]
  30. FROM
  31. (
  32. SELECT * FROM #temp WHERE num=2
  33. ) AS t1
  34. unpivot
  35. (
  36. [2] FOR numero IN (clase01,clase02,clase03,clase04,clase05,clase06)
  37. ) AS t2) AS tabla2 ON (tabla1.numero=tabla2.numero)

y el resultado final:

numero 1 2
clase01 1000 7000
clase02 2000 8000
clase03 3000 9000
clase04 4000 10000
clase05 5000 11000
clase06 6000 12000


saludos,
Libras
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #3 (permalink)  
Antiguo 19/06/2014, 10:36
Avatar de drako_darpan  
Fecha de Ingreso: octubre-2008
Ubicación: Sinaloa
Mensajes: 617
Antigüedad: 15 años, 6 meses
Puntos: 58
Respuesta: Duda para obtener información por PIVOT

Gracias Libras, justo eso ocupaba hacer

__________________
Your Code as a Crime Scene...
  #4 (permalink)  
Antiguo 19/06/2014, 13:28
Avatar de drako_darpan  
Fecha de Ingreso: octubre-2008
Ubicación: Sinaloa
Mensajes: 617
Antigüedad: 15 años, 6 meses
Puntos: 58
Respuesta: Duda para obtener información por PIVOT

Libra, gracias por la ayuda, pero ahora se me presenta la siguiente duda.

Código SQL:
Ver original
  1. CREATE TABLE #temp
  2.     (
  3.     num INT,
  4.     clase01 BIGINT,
  5.     clase02 INT,
  6.     clase03 INT,
  7.     clase04 INT,
  8.     clase05 INT,
  9.     clase06 INT
  10.     )
  11.        
  12.        INSER T INTO #temp VALUES (1      ,      1000    ,      2000    ,     3000    ,      4000    ,      5000    ,      6000)
  13.        INSER T INTO #temp VALUES (2      ,      7000    ,      8000    ,     9000    ,     10000   ,    11000    ,    12000)
  14.      
  15.      
  16.     SELEC T tabla1.numero,tabla1.[1],tabla2.[2] FROM(
  17.     SELEC T numero,[1]
  18.     FROM
  19.     (
  20.     SELEC T * FROM #temp WHERE num=1
  21.     ) AS t1
  22.     unpivot
  23.     (
  24.     [1] FOR numero IN (clase01,clase02,clase03,clase04,clase05,clase06)
  25.     ) AS t2
  26.     ) AS tabla1
  27.     LEFT JOIN
  28.      
  29.     (SELEC T numero,[2]
  30.     FROM
  31.     (
  32.     SELEC T * FROM #temp WHERE num=2
  33.     ) AS t1
  34.     unpivot
  35.     (
  36.     [2] FOR numero IN (clase01,clase02,clase03,clase04,clase05,clase06)
  37.     ) AS t2) AS tabla2 ON (tabla1.numero=tabla2.numero)

El cambio es que si un campo es diferente al correr el UNPIVOT, marca error. En mi caso ocupo usar SMALLINT, INT y BIGINT, como le podria hacer??
__________________
Your Code as a Crime Scene...
  #5 (permalink)  
Antiguo 19/06/2014, 13:40
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Duda para obtener información por PIVOT

sencillo:

Código SQL:
Ver original
  1. CREATE TABLE #temp
  2.     (
  3.     num INT,
  4.     clase01 BIGINT,
  5.     clase02 INT,
  6.     clase03 INT,
  7.     clase04 INT,
  8.     clase05 INT,
  9.     clase06 INT,
  10.     clase07 SMALLINT
  11.     )
  12.        
  13.        INSERT INTO #temp VALUES (1      ,      1000    ,      2000    ,     3000    ,      4000    ,      5000    ,      6000,45)
  14.        INSERT INTO #temp VALUES (2      ,      7000    ,      8000    ,     9000    ,     10000   ,    11000    ,    12000,55)
  15.      
  16.      
  17.     SELECT tabla1.numero,tabla1.[1],tabla2.[2] FROM(
  18.     SELECT numero,[1]
  19.     FROM
  20.     (
  21.         SELECT CONVERT(BIGINT,clase01) AS clase01,CONVERT(BIGINT,clase02) AS clase02,
  22.     CONVERT(BIGINT,clase03) AS clase03,CONVERT(BIGINT,clase04) AS clase04,
  23.     CONVERT(BIGINT,clase05) AS clase05,CONVERT(BIGINT,clase06) AS clase06,CONVERT(BIGINT,clase07) AS clase07
  24.    
  25.      FROM #temp WHERE num=1
  26.     ) AS t1
  27.     unpivot
  28.     (
  29.     [1] FOR numero IN (clase01,clase02,clase03,clase04,clase05,clase06,clase07)
  30.     ) AS t2
  31.     ) AS tabla1
  32.     LEFT JOIN
  33.      
  34.     (
  35.     SELECT numero,[2]
  36.     FROM
  37.     (
  38.     SELECT CONVERT(BIGINT,clase01) AS clase01,CONVERT(BIGINT,clase02) AS clase02,
  39.     CONVERT(BIGINT,clase03) AS clase03,CONVERT(BIGINT,clase04) AS clase04,
  40.     CONVERT(BIGINT,clase05) AS clase05,CONVERT(BIGINT,clase06) AS clase06,CONVERT(BIGINT,clase07) AS clase07
  41.    
  42.      FROM #temp WHERE num=2
  43.     ) AS t1
  44.     unpivot
  45.     (
  46.     [2] FOR numero IN (clase01 ,clase02,clase03,clase04,clase05,clase06,clase07)
  47.     ) AS t2) AS tabla2 ON (tabla1.numero=tabla2.numero)

saludos!
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me

Etiquetas: pivot, siguiente, tabla
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 17:40.