Bạn có thể thực hiện việc này với PIVOT . Khi thực hiện PIVOT, bạn có thể thực hiện theo một trong hai cách, với Static Pivot mà bạn sẽ viết mã các hàng để chuyển đổi hoặc Dynamic Pivot sẽ tạo danh sách các cột tại thời điểm chạy:
Static Pivot (Xem SQL Fiddle cho 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
Hoặc bạn có thể sử dụng Dynamic Pivot (Xem SQL Fiddle cho 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)
Cả hai truy vấn sẽ trả về cùng một kết quả.