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

Wie erstelle ich eine PivotTable in Transact/SQL?

Sie müssen einen PIVOT . Sie können entweder einen STATISCHEN PIVOT verwenden, bei dem Sie die Werte der zu transformierenden Spalten kennen, oder einen DYNAMISCHEN PIVOT, bei dem die Spalten bis zur Ausführungszeit unbekannt sind.

Statischer Drehpunkt (Siehe SQL Fiddle mit 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

Dynamischer Drehpunkt (Siehe SQL Fiddle mit 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)

Beide werden die gleichen Ergebnisse liefern.