Ver Mensaje Individual
  #6 (permalink)  
Antiguo 15/08/2014, 15:51
Avatar de Libras
Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 18 años, 3 meses
Puntos: 774
Respuesta: Pivot de dos columnas dinamico

eso lo puedes sacar con lo que te pase, solo piensale un poquito.....

Código SQL:
Ver original
  1. SELECT t1.producto,MAX(t1.[201406]),MAX(t1.[201407]),MAX(t1.[201408]),MAX(t1.[201409]),MAX(t1.[201410]),MAX(t1.[201411]),MAX(t1.[201412]),MAX(t1.[201501]),MAX(t1.[201502]),
  2. MAX(t2.[201406]),MAX(t2.[201407]),MAX(t2.[201408]),MAX(t2.[201409]),MAX(t2.[201410]),MAX(t2.[201411]),MAX(t2.[201412]),MAX(t2.[201501]),MAX(t2.[201502])
  3.  
  4. FROM(
  5. SELECT producto, [201406],[201407],[201408],[201409],[201410],[201411],[201412],[201501],[201502] FROM
  6. (
  7. SELECT producto,requerido,periodo,demanda FROM #mitabla
  8. ) AS sourcetable
  9. pivot
  10. (
  11. MAX(requerido) FOR periodo IN ( [201406],[201407],[201408],[201409],[201410],[201411],[201412],[201501],[201502])
  12. ) AS pivote
  13. ) AS t1
  14. INNER JOIN
  15. (
  16. SELECT producto, [201406],[201407],[201408],[201409],[201410],[201411],[201412],[201501],[201502] FROM
  17. (
  18. SELECT producto,requerido,periodo,demanda FROM #mitabla
  19. ) AS sourcetable
  20. pivot
  21. (
  22. MAX(demanda) FOR periodo IN ( [201406],[201407],[201408],[201409],[201410],[201411],[201412],[201501],[201502])
  23. ) AS pivote
  24. ) AS t2 ON (t1.producto=t2.producto)
  25. GROUP BY t1.producto

algo asi :) y lo obtienes con algo como esto:

Código SQL:
Ver original
  1. CREATE TABLE #mitabla(
  2. Producto VARCHAR(04),
  3. periodo INT,
  4. Requerido INT,
  5. Demanda INT
  6. )
  7. GO
  8.  
  9. INSERT INTO #mitabla(Producto, Periodo, Requerido, Demanda) VALUES('1001',201406,4480,0)
  10. INSERT INTO #mitabla(Producto, Periodo, Requerido, Demanda) VALUES('1001',201407,10973,1105)
  11. INSERT INTO #mitabla(Producto, Periodo, Requerido, Demanda) VALUES('1001',201408,8960,8960)
  12. INSERT INTO #mitabla(Producto, Periodo, Requerido, Demanda) VALUES('1001',201409,11200,11200)
  13. INSERT INTO #mitabla(Producto, Periodo, Requerido, Demanda) VALUES('1001',201410,30914,30914)
  14. INSERT INTO #mitabla(Producto, Periodo, Requerido, Demanda) VALUES('1001',201411,27602,27602)
  15. INSERT INTO #mitabla(Producto, Periodo, Requerido, Demanda) VALUES('1001',201412,19594,19594)
  16. INSERT INTO #mitabla(Producto, Periodo, Requerido, Demanda) VALUES('1001',201501,10719,10719)
  17. INSERT INTO #mitabla(Producto, Periodo, Requerido, Demanda) VALUES('1001',201502,7290,7290)
  18. INSERT INTO #mitabla(Producto, Periodo, Requerido, Demanda) VALUES('1002',201406,8521,0)
  19. INSERT INTO #mitabla(Producto, Periodo, Requerido, Demanda) VALUES('1002',201407,12786,4304)
  20. INSERT INTO #mitabla(Producto, Periodo, Requerido, Demanda) VALUES('1002',201408,8960,8960)
  21. INSERT INTO #mitabla(Producto, Periodo, Requerido, Demanda) VALUES('1002',201409,26880,26880)
  22. INSERT INTO #mitabla(Producto, Periodo, Requerido, Demanda) VALUES('1002',201410,37970,37970)
  23. INSERT INTO #mitabla(Producto, Periodo, Requerido, Demanda) VALUES('1002',201411,14754,14754)
  24. INSERT INTO #mitabla(Producto, Periodo, Requerido, Demanda) VALUES('1002',201412,11364,11364)
  25. INSERT INTO #mitabla(Producto, Periodo, Requerido, Demanda) VALUES('1002',201501,17947,17947)
  26. INSERT INTO #mitabla(Producto, Periodo, Requerido, Demanda) VALUES('1002',201502,3000,3000)
  27.  
  28.  
  29. SELECT DISTINCT periodo AS dato,IDENTITY(INT,1,1) AS rn INTO #temp2 FROM #mitabla
  30.  
  31. SELECT * FROM #temp2
  32. DECLARE @x INT
  33. DECLARE @query Nvarchar(MAX)
  34. DECLARE @variable Nvarchar(MAX)
  35. DECLARE @fecha Nvarchar(MAX)
  36. SET @x=1
  37.  
  38. SET @query=''
  39. SET @variable=''
  40. SET @fecha=''
  41. while @x<=(SELECT COUNT(*) FROM #temp2)
  42. BEGIN
  43.     SET @fecha=@fecha + (SELECT '[' + CONVERT(VARCHAR(20),dato) + ']' FROM #temp2 WHERE rn=@x) + ','   
  44.     SET @x=@x+1
  45. END
  46. print @fecha
  47.  
  48. SET @fecha=SUBSTRING(@fecha,1,len(@fecha)-1)
  49.  
  50. SET @query='
  51.  
  52. select * from(
  53. select producto, ' + @fecha +
  54. ' from
  55. (
  56. SELECT producto,requerido,periodo,demanda FROM #mitabla
  57. ) as sourcetable
  58. pivot
  59. (
  60. max(requerido) for periodo in ( ' + @fecha + ')
  61. ) as pivote
  62. ) as t1
  63. inner join
  64. (
  65. select producto, ' + @fecha +
  66. ' from
  67. (
  68. SELECT producto,requerido,periodo,demanda FROM #mitabla
  69. ) as sourcetable
  70. pivot
  71. (
  72. max(demanda) for periodo in ( ' + @fecha + ')
  73. ) as pivote
  74. ) as t2 on (t1.producto0t2.producto)
  75. )
  76.  
  77. '
  78. print @query
  79. EXEC sp_executesql @query
  80. DROP TABLE #temp2
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me