SQL Server行的值作为列名的数据透视表?(SQL Server row values as

2019-07-01 11:43发布

我在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视图快照

Answer 1:

您可以与执行该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拨弄演示



文章来源: SQL Server row values as column names Pivot Table?