sql >> Base de Datos >  >> RDS >> Sqlserver

Cómo pivotar datos de una tabla con SQL Server 2005

En realidad, esto se puede hacer bastante fácilmente con un PIVOT función. Dado que la otra respuesta no muestra el código asociado con cómo realizarlo, aquí hay dos formas de PIVOT los datos.

El primero es con un pivote estático . Un pivote estático es cuando conoce los datos con anticipación para convertirlos en columnas.

select *
from 
(
    select name, id, convert(char(5), dt, 101) dt, jobid, amount
    from test
) x
pivot
(
    sum(amount)
    for dt in ([01/02], [02/02], [03/02], [04/05], [05/05])
)p
order by jobid, name

Consulte SQL Fiddle con demostración

La segunda forma es usando un PIVOT dinámico para identificar en tiempo de ejecución los valores a convertir en columnas.

DECLARE @cols AS NVARCHAR(MAX),
    @query  AS NVARCHAR(MAX)

select @cols = STUFF((SELECT distinct ',' + QUOTENAME(convert(char(5), dt, 101)) 
                    from test
            FOR XML PATH(''), TYPE
            ).value('.', 'NVARCHAR(MAX)') 
        ,1,1,'')

set @query = 'SELECT name, id, ' + @cols + ', jobid from 
             (
                select  name, id, convert(char(5), dt, 101) dt, jobid, amount
                from test
            ) x
            pivot 
            (
                sum(amount)
                for dt in (' + @cols + ')
            ) p 
            order by jobid, name'

execute(@query)

Consulte SQL Fiddle con demostración

Ambos producirán los mismos resultados. Dynamic funciona muy bien cuando no conoce los valores con anticipación para convertirlos en columnas.