Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Come ruotare i dati da una tabella con SQL Server 2005

Questo in realtà può essere fatto abbastanza facilmente con un PIVOT funzione. Poiché l'altra risposta non mostra il codice associato a come eseguirla, ecco due modi per PIVOT i dati.

Il primo è con un Pivot statico . Un pivot statico è quando conosci in anticipo i dati da trasformare in colonne.

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

Vedi SQL Fiddle con demo

Il secondo modo è utilizzare un PIVOT dinamico per identificare in fase di esecuzione i valori da trasformare in colonne.

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)

Vedi SQL Fiddle con demo

Entrambi produrranno gli stessi risultati. La dinamica funziona alla grande quando non si conoscono i valori in anticipo da convertire in colonne.