Bạn có thể thực hiện việc này với PIVOT
hàm số. Nếu bạn biết các giá trị mà bạn muốn chuyển thành cột hơn là bạn có thể viết mã cứng thì hãy sử dụng một pivot tĩnh:
select *
from
(
select dept, emp_id, emp_name, p_date, hours_worked
from table1
) x
pivot
(
max(hours_worked)
for p_date in ([2012-10-19], [2012-10-20], [2012-10-21])
) p
Nếu bạn có một số lượng giá trị không xác định, thì bạn có thể sử dụng sql động để PIVOT
dữ liệu:
DECLARE @cols AS NVARCHAR(MAX),
@query AS NVARCHAR(MAX)
select @cols = STUFF((SELECT distinct ','
+ QUOTENAME(convert(char(10), p_date, 120))
from table1
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)')
,1,1,'')
set @query = 'SELECT dept, emp_id, emp_name,' + @cols + ' from
(
select dept, emp_id, emp_name, p_date, hours_worked
from table1
) x
pivot
(
max(hours_worked)
for p_date in (' + @cols + ')
) p '
execute(@query)