drop table #datos
create table #datos (fila int, columna int, valor numeric(10,2))
insert into #datos (fila, columna, valor)values(1,1,10)
insert into #datos (fila, columna, valor)values(1,2,10)
insert into #datos (fila, columna, valor)values(2,3,10)
insert into #datos (fila, columna, valor)values(3,4,10)
DECLARE @columns varchar(MAX);
DECLARE @sql nvarchar(max)
SET @columns = STUFF( ( SELECT ',' + QUOTENAME(columna) FROM (SELECT distinct columna FROM #datos ) AS T ORDER BY columna FOR XML PATH('') ), 1, 1, '');
print @columns
SET @sql = N'
SELECT
*
FROM
(
SELECT fila, valor, columna
FROM #datos
) AS T
PIVOT
(
sum(valor)
FOR columna IN (' + @columns + N')
) AS P order by fila;';
EXEC sp_executesql @sql;
Si el resultado de la referencia cruzada quisieras utilizarlo combinado con otra tabla deberías inviarlo a una tabla temporal
drop table ##respuesta
SELECT
* into ##respuesta
FROM
(
SELECT fila, valor, columna
FROM #datos
) AS T
PIVOT
(
sum(valor)
FOR columna IN (' + @columns + N')
) AS P order by fila;
';
EXEC sp_executesql @sql;
select * from ##respuesta;
No hay comentarios:
Publicar un comentario