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

Hvordan opretter man en pivottabel i Transact/SQL?

Du skal bruge en PIVOT . Du kan bruge enten en STATISK PIVOT, hvor du kender værdierne for de kolonner, der skal transformeres, eller en DYNAMISK PIVOT, hvor kolonnerne er ukendte indtil udførelsestidspunktet.

Statisk pivot (Se SQL Fiddle with Demo ):

select *
from 
(
    select memid, Condition_id, Condition_Result
    from t
) x
pivot
(
    sum(condition_result)
    for condition_id in ([C1], [C2], [C3], [C4])
) p

Dynamisk pivot (Se SQL Fiddle with Demo ):

DECLARE @cols AS NVARCHAR(MAX),
    @query  AS NVARCHAR(MAX)

SET @cols = STUFF((SELECT distinct ',' + QUOTENAME(c.condition_id) 
            FROM t c
            FOR XML PATH(''), TYPE
            ).value('.', 'NVARCHAR(MAX)') 
        ,1,1,'')


set @query = 'SELECT memid, ' + @cols + ' from 
            (
                select MemId, Condition_id, condition_result
                from t
           ) x
            pivot 
            (
                sum(condition_result)
                for condition_id in (' + @cols + ')
            ) p '


execute(@query)

Begge vil generere de samme resultater.




  1. Sådan indstilles standardsproget for alle nye logins i SQL Server (T-SQL)

  2. VALUES-klausul i SQL Server

  3. Escape-kolonnenavne i PDO-udsagn

  4. Hvordan tilpasser man konfigurationsfilen for det officielle PostgreSQL Docker-billede?