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

Sådan pivoterer du data fra én tabel med SQL Server 2005

Dette kan faktisk gøres ret nemt med en PIVOT fungere. Da det andet svar ikke viser den kode, der er forbundet med, hvordan det udføres, er der to måder at PIVOT på dataene.

Først med en Statisk pivot . Et statisk pivot er, når du ved, at dataene på forhånd bliver til kolonner.

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

Se SQL Fiddle with Demo

Den anden måde er ved at bruge en Dynamisk PIVOT for at identificere de værdier, der skal vendes til kolonner under kørsel.

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)

Se SQL Fiddle with Demo

Begge vil give de samme resultater. Dynamikken fungerer godt, når du ikke kender værdierne på forhånd for at konvertere til kolonner.




  1. MariaDB JSON_ARRAYAGG() Forklaret

  2. Hvordan kan jeg gøre noget som:BRUG @databaseName

  3. SQL Array-søgning

  4. MySQL BESTIL EFTER [brugerdefineret SET-feltværdi]