Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Comment faire pivoter les données d'une table avec SQL Server 2005

Cela peut en fait être fait assez facilement avec un PIVOT fonction. Étant donné que l'autre réponse ne montre pas le code associé à la façon de l'exécuter, voici deux façons de PIVOT les données.

Le premier est avec un pivot statique . Un pivot statique, c'est quand vous savez à l'avance que les données doivent être transformées en colonnes.

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

Voir SQL Fiddle avec démo

La deuxième méthode consiste à utiliser un PIVOT dynamique pour identifier au moment de l'exécution les valeurs à transformer en colonnes.

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)

Voir SQL Fiddle avec démo

Les deux produiront les mêmes résultats. La dynamique fonctionne très bien lorsque vous ne connaissez pas à l'avance les valeurs à convertir en colonnes.