Moh*_*din 1 sql-server pivot sql-server-2008
我在SQL Server 2008中有以下视图.
DEPT | EMP_ID | EMP_NAME | P_DATE | HOURS_WORKED
Run Code Online (Sandbox Code Playgroud)
我希望视图是这样的:
DEPT | EMP_ID | EMP_NAME | 2012-09-28 | 2012-09-29 | 2012-09-30 | 2012-10-01 ...
Run Code Online (Sandbox Code Playgroud)
上面的日期列标题是P_DATE,其中是该员工在该特定日期的"Hours_Worked"值.
喜欢
2012-09-28
09:00:00
10:00:00
Run Code Online (Sandbox Code Playgroud)
我不确定我是否可以使用Pivot实现它.
请转到此链接以获得清晰的理解: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
Run Code Online (Sandbox Code Playgroud)
如果您具有未知数量的值,则可以PIVOT
对数据使用动态sql :
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)
Run Code Online (Sandbox Code Playgroud)