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.