Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

So Pivotieren Sie Daten aus einer Tabelle mit SQL Server 2005

Dies kann eigentlich ganz einfach mit einem erfolgen PIVOT Funktion. Da die andere Antwort nicht den zugehörigen Code zur Ausführung zeigt, gibt es hier zwei Möglichkeiten zum PIVOT die Daten.

Das erste ist mit einem statischen Pivot . Ein statischer Pivot ist, wenn Sie die Daten im Voraus wissen, um sie in Spalten umzuwandeln.

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

Siehe SQL-Geige mit Demo

Die zweite Möglichkeit ist die Verwendung eines Dynamic PIVOT um zur Laufzeit die Werte zu identifizieren, die in Spalten umgewandelt werden sollen.

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)

Siehe SQL-Fiddle mit Demo

Beide werden die gleichen Ergebnisse liefern. Die Dynamik funktioniert hervorragend, wenn Sie die Werte nicht im Voraus kennen, um sie in Spalten umzuwandeln.