我在SQL Server 2008中的以下看法。
DEPT | EMP_ID | EMP_NAME | P_DATE | HOURS_WORKED
我想认为是这个样子:
DEPT | EMP_ID | EMP_NAME | 2012-09-28 | 2012-09-29 | 2012-09-30 | 2012-10-01 ...
当上述日期的列标题是P_DATE下面是在那个特定的日期该雇员的“Hours_Worked”值。
喜欢
2012-09-28
09:00:00
10:00:00
我不知道我是否可以使用数据透视实现它。
请到这个链接清醒的认识: SQL Server视图快照
您可以与执行该PIVOT
功能。 如果你知道你想要比你可以再使用静态支点硬编码转成列的值:
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
请参阅SQL拨弄演示
如果你有一个未知的数值,那么你可以使用动态SQL PIVOT
数据:
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)
请参阅SQL拨弄演示