1

SQLServer2008には次のビューがあります。

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

Pivotを使用してそれを達成できるかどうかはわかりません。

明確に理解するには、このリンクにアクセスしてください:SQLServerビュースナップショット

4

1 に答える 1

7

これは、関数を使用して実行できます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 FiddlewithDemoを参照してください

値の数が不明な場合は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)

SQL FiddlewithDemoを参照してください

于 2012-10-20T15:22:16.913 に答える