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 |