これは、PIVOTを使用して実行できます。 a> 。 PIVOTを実行するときは、変換する行をコーディングする静的ピボットと、実行時に列のリストを作成する動的ピボットの2つの方法のいずれかを実行できます。
静的ピボット( SQL Fiddle forDemo を参照してください。 ):
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
または、動的ピボットを使用することもできます( SQL Fiddle forDemo を参照してください。 ):
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)
どちらのクエリも同じ結果を返します。