2014-04-04 21 views
0
SELECT * 
FROM (
    SELECT [TM_UserID], 
     [FullName], 
     [Worked_dte], 
     [Worked_Hours] 
    FROM @Reporting_User_Timesheet 
    WHERE [worked_dte] BETWEEN '2014-04-04' 
      AND '2014-04-06' 
    ) AS sourceTable 
Pivot(sum([Worked_Hours]) FOR [Worked_dte] IN ([2014-04-04], [2014-04-05], [2014-04-06])) AS PivotTable 

回答

0

很明顯,在黑暗中拍攝,但這裏是我如何理解你的問題。

首先,你需要一個日曆表以獲取範圍日期:

http://www.dbdelta.com/calendar-table-and-datetime-functions/

之後,建造所需的PIVOT查詢和動態執行:

declare @range_start date, @range_end date; 

select @range_start = '20140404', @range_end = '20140406'; 

declare @collist nvarchar(max); 
SET @collist = stuff((select distinct ',' + QUOTENAME(convert(varchar,date,112)) 
      FROM calendar 
      WHERE Datue BETWEEN @range_start AND @range_end 
      FOR XML PATH(''), TYPE 
      ).value('.', 'NVARCHAR(MAX)') 
     ,1,1,''); 

declare @q nvarchar(max); 
set @q = ' 
SELECT * 
FROM (
    SELECT [TM_UserID], 
     [FullName], 
     [Worked_dte], 
     [Worked_Hours] 
    FROM @Reporting_User_Timesheet 
    WHERE [worked_dte] BETWEEN ''' + CONVERT(varchar, @range_start, 112) + ''' 
      AND ''' + CONVERT(varchar, @range_end, 112) + ''' 
) AS sourceTable 
Pivot (
    sum([Worked_Hours]) FOR [Worked_dte] IN (' + @collist + ') 
) AS PivotTable 
'; 

exec (@q); 
相關問題