0

以下のクエリは、週ごとにグループ化されたコース時間の合計を返します。問題は、週の値がクエリで定義できないたびに異なる可能性があることです。クエリで返される内容の例を次に示します。

ID        Category      Week of   Total Hours
1111554 Case Management 7/2/2012     7
1111554 Case Management 7/9/2012     7
1111554 Case Management 7/16/2012       7
1111554 Pre-GED         7/2/2012    3
1111554 Pre-GED         7/9/2012    3
1111554 Pre-GED         7/16/2012   3

クエリ

WITH cteSource(DOP_ID, Category, WeekOf, [Hours])
AS (
    SELECT  DOP_ID,
         Category,
        DATEADD(DAY, DATEDIFF(DAY, '19000101', [Date]) / 7 * 7 , '19000101') AS WeekOf, -- Monday
        [Hours]
    FROM    GW_PPP.dbo.SLAM_Attendence
)
SELECT      DOP_ID AS ID,
        Category,
        WeekOf AS [Week of],
        SUM([Hours]) AS [Total Hours]
FROM        cteSource
GROUP BY    DOP_ID,
        Category,
        WeekOf
ORDER BY    DOP_ID,
        Category,
        WeekOf;

繰り返しますが、クエリで週を定義しないことでテーブルをピボットする方法がわかりません

SO の週が定義されている場合は、次のようなものを使用しません。

pivot
(

 week of in ([7/2/2012], [7/9/2012],
               [7/16/2012 ])
) piv

可能であれば、月ごとの合計列も追加したいと思います。ここに私が望む出力があります:

ID            Category  7/2/2012 7/9/2012 7/16/2012 July 12 Total
1111554 Case Management     7      7         7           21 
1111554 Pre-GED             3      3         3           12
4

1 に答える 1

1

週の値がどうなるかわからない場合は、動的 SQL を使用して結果を取得する必要があります。

DECLARE @cols AS NVARCHAR(MAX),
    @query  AS NVARCHAR(MAX)

select @cols = STUFF((SELECT distinct ',' + QUOTENAME(DATEADD(DAY, DATEDIFF(DAY, '19000101', [Date]) / 7 * 7 , '19000101')) 
                    from GW_PPP.dbo.SLAM_Attendence
            FOR XML PATH(''), TYPE
            ).value('.', 'NVARCHAR(MAX)') 
        ,1,1,'')

set @query = 'SELECT DOP_ID, Category, ' + @cols + ' 
            from 
            (
              SELECT  DOP_ID,
                   Category,
                  DATEADD(DAY, DATEDIFF(DAY, ''19000101'', [Date]) / 7 * 7 , ''19000101'') AS WeekOf, -- Monday
                  [Hours]
              FROM    GW_PPP.dbo.SLAM_Attendence
            ) x
            pivot 
            (
                SUM(hours)
                for weekof in (' + @cols + ')
            ) p '

execute sp_executesql @query;

デモで SQL Fiddle を参照してください

于 2013-08-28T19:08:56.887 に答える