2013-08-28 2 views
0

에 정의되지 않은 경우 쿼리는 다음 주별로 그룹화 물론 시간의 합을 찾아온다. 문제는 쿼리에서 정의 할 수없는 경우마다 주 값이 다를 수 있다는 것입니다. 여기에 다시 쿼리에서 가져온 것의 예입니다SQL 피벗이 날짜의 일주일이 쿼리

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; 

다시

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 

질의, 나는에 주를 정의하지 않음으로써 테이블을 돌리고하는 방법을 알아낼 수 없습니다 쿼리

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 

답변

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 with Demo

보기
관련 문제