Sie können dies mit einem PIVOT . Wenn Sie den PIVOT ausführen, können Sie dies auf zwei Arten tun, mit einem statischen Pivot, mit dem Sie die zu transformierenden Zeilen codieren, oder mit einem dynamischen Pivot, der die Liste der Spalten zur Laufzeit erstellt:
Statisches Pivot (Siehe SQL Fiddle for Demo ):
select id, [user], [engineer], [manu], [OS]
from
(
select t.id
, t.[user]
, p.ticketid
, p.label
, p.value
from tickets t
inner join properties p
on t.id = p.ticketid
) x
pivot
(
min(value)
for label in ([engineer], [manu], [OS])
) p
Oder Sie können einen dynamischen Pivot verwenden (siehe SQL Fiddle for Demo ). ):
DECLARE @cols AS NVARCHAR(MAX),
@query AS NVARCHAR(MAX);
select @cols = STUFF((SELECT distinct ',' + QUOTENAME(p.label)
from tickets t
inner join properties p
on t.id = p.ticketid
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)')
,1,1,'')
set @query = 'SELECT id, [user], ' + @cols + ' from
(
select t.id
, t.[user]
, p.ticketid
, p.label
, p.value
from tickets t
inner join properties p
on t.id = p.ticketid
) x
pivot
(
min(value)
for label in (' + @cols + ')
) p '
execute(@query)
Beide Abfragen geben die gleichen Ergebnisse zurück.