SQL Server row values as column names Pivot Table?

后端 未结 1 1610
天命终不由人
天命终不由人 2021-01-16 09:58

I have the following view in SQL Server 2008.

DEPT | EMP_ID | EMP_NAME | P_DATE  | HOURS_WORKED

I want the view to be this way:

<         


        
相关标签:
1条回答
  • 2021-01-16 10:16

    You can perform this with the PIVOT function. If you know the values that you want to turn into columns than you can hard code then using a static 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
    

    See SQL Fiddle with Demo

    If you have an unknown number of values, then you can use dynamic sql to PIVOT the data:

    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)
    

    See SQL Fiddle with Demo

    0 讨论(0)
提交回复
热议问题