Ver Mensaje Individual
  #7 (permalink)  
Antiguo 15/08/2014, 18:37
ceqn_20
 
Fecha de Ingreso: agosto-2014
Mensajes: 17
Antigüedad: 10 años, 3 meses
Puntos: 0
Respuesta: Pivot de dos columnas dinamico

Muchas gracias Libra!! en principio me saltaron algunos errores en el dinámico pero los corregí, lo he complementado ya que el resultado no me convencía del todo.. pero ya esta, Gracias (;


drop table #mitabla

CREATE TABLE #mitabla(
Producto VARCHAR(04),
periodo INT,
Requerido INT,
Demanda INT
)
GO

INSERT INTO #mitabla(Producto, Periodo, Requerido, Demanda) VALUES('1001',201406,4480,0)
INSERT INTO #mitabla(Producto, Periodo, Requerido, Demanda) VALUES('1001',201407,10973,1105)
INSERT INTO #mitabla(Producto, Periodo, Requerido, Demanda) VALUES('1001',201408,8960,8960)
INSERT INTO #mitabla(Producto, Periodo, Requerido, Demanda) VALUES('1001',201409,11200,11200)
INSERT INTO #mitabla(Producto, Periodo, Requerido, Demanda) VALUES('1001',201410,30914,30914)
INSERT INTO #mitabla(Producto, Periodo, Requerido, Demanda) VALUES('1001',201411,27602,27602)
INSERT INTO #mitabla(Producto, Periodo, Requerido, Demanda) VALUES('1001',201412,19594,19594)
INSERT INTO #mitabla(Producto, Periodo, Requerido, Demanda) VALUES('1001',201501,10719,10719)
INSERT INTO #mitabla(Producto, Periodo, Requerido, Demanda) VALUES('1001',201502,7290,7290)
INSERT INTO #mitabla(Producto, Periodo, Requerido, Demanda) VALUES('1002',201406,8521,0)
INSERT INTO #mitabla(Producto, Periodo, Requerido, Demanda) VALUES('1002',201407,12786,4304)
INSERT INTO #mitabla(Producto, Periodo, Requerido, Demanda) VALUES('1002',201408,8960,8960)
INSERT INTO #mitabla(Producto, Periodo, Requerido, Demanda) VALUES('1002',201409,26880,26880)
INSERT INTO #mitabla(Producto, Periodo, Requerido, Demanda) VALUES('1002',201410,37970,37970)
INSERT INTO #mitabla(Producto, Periodo, Requerido, Demanda) VALUES('1002',201411,14754,14754)
INSERT INTO #mitabla(Producto, Periodo, Requerido, Demanda) VALUES('1002',201412,11364,11364)
INSERT INTO #mitabla(Producto, Periodo, Requerido, Demanda) VALUES('1002',201501,17947,17947)
INSERT INTO #mitabla(Producto, Periodo, Requerido, Demanda) VALUES('1002',201502,3000,3000)


SELECT DISTINCT periodo AS dato,IDENTITY(INT,1,1) AS rn INTO #temp2 FROM #mitabla

--SELECT * FROM #temp2
DECLARE @x INT
DECLARE @query Nvarchar(MAX)
DECLARE @variable Nvarchar(MAX)
DECLARE @fecha Nvarchar(MAX)
DECLARE @fecha2 Nvarchar(MAX)
SET @x=1

SET @query=''
SET @variable=''
SET @fecha=''
SET @fecha2=' t1.producto, '
while @x<=(SELECT COUNT(*) FROM #temp2)
BEGIN --MAX(t1.[201406])[201406],MAX(t1.[201407])[201407],
SET @fecha=@fecha + (SELECT '[' + CONVERT(VARCHAR(20),dato) + ']' FROM #temp2 WHERE rn=@x) + ','
SET @fecha2=@fecha2 + (SELECT 'MAX(t1.[' + CONVERT(VARCHAR(20),dato) + '])[' + CONVERT(VARCHAR(20),dato) + '], MAX(t2.[' + CONVERT(VARCHAR(20),dato) + '])[' + CONVERT(VARCHAR(20),dato) + ']' FROM #temp2 WHERE rn=@x) + ','
SET @x=@x+1
END
print @fecha

SET @fecha=SUBSTRING(@fecha,1,len(@fecha)-1)
SET @fecha2=SUBSTRING(@fecha2,1,len(@fecha2)-1)

SET @query='

select ' + @fecha2 + ' from(
select producto, ' + @fecha +
' from
(
SELECT producto,requerido,periodo,demanda FROM #mitabla
) as sourcetable
pivot
(
max(requerido) for periodo in ( ' + @fecha + ')
) as pivote
) as t1
inner join
(
select producto, ' + @fecha +
' from
(
SELECT producto,requerido,periodo,demanda FROM #mitabla
) as sourcetable
pivot
(
max(demanda) for periodo in ( ' + @fecha + ')
) as pivote
) as t2 on (t1.producto=t2.producto)
GROUP BY t1.producto

'
print @query
EXEC sp_executesql @query
DROP TABLE #temp2

Última edición por ceqn_20; 15/08/2014 a las 19:03