sql >> Databasteknik >  >> RDS >> Sqlserver

Hur man pivoterar data från en tabell med SQL Server 2005

Detta kan faktiskt göras ganska enkelt med en PIVOT fungera. Eftersom det andra svaret inte visar koden som är kopplad till hur man utför det, finns det två sätt att PIVOT uppgifterna.

Det första är med en Statisk pivot . En statisk pivot är när du vet att data i förväg förvandlas till kolumner.

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-fiol med demo

Det andra sättet är att använda en Dynamisk PIVOT för att identifiera de värden som ska vändas till kolumner under körning.

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-fiol med demo

Båda ger samma resultat. Dynamiken fungerar utmärkt när du inte känner till värdena i förväg för att konvertera till kolumner.




  1. Problem med T-SQL TRY CATCH?

  2. Fel:Det finns ej bindande transaktioner

  3. PHP med MySQL 8.0+-fel:Servern begärde autentiseringsmetod okänd för klienten

  4. Webbseminarium:Banking on Postgres – Finansiella tillämpningsöverväganden [Uppföljning]