sql >> Databasteknik >  >> RDS >> Sqlserver

Hur skapar man en pivottabell i Transact/SQL?

Du måste använda en PIVOT . Du kan använda antingen en STATISK PIVOT där du känner till värdena för kolumnerna som ska transformeras eller en DYNAMISK PIVOT där kolumnerna är okända fram till körningstidpunkten.

Statisk pivot (Se SQL-fiol med 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-fiol med 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)

Båda kommer att generera samma resultat.




  1. Lista alla kund-ID och efternamn som har gjort fler än 2 beställningar

  2. Hibernate mysql innodb

  3. Hur FROM_BASE64() fungerar i MariaDB

  4. Hur lagrar jag beställningar?