我有以下存儲過程:GROUP BY日期範圍?
SELECT tsks.grouping_ref, ttg.description AS grouping_desc,
SUM(ts.booked_time) AS booked_time_total,
DATENAME(MONTH, ts.start_dtm) + ' ' + DATENAME(YEAR, ts.start_dtm) AS month_name,
@month_ref AS month_ref
FROM timesheets ts
JOIN timesheet_categories cat
ON ts.timesheet_cat_ref = cat.timesheet_cat_ref
JOIN timesheet_tasks tsks
ON ts.task_ref = tsks.task_ref
JOIN timesheet_task_groupings ttg
ON tsks.grouping_ref = ttg.grouping_ref
WHERE ts.status IN(1, 2) --Booked and approved
AND cat.is_leave_category = 0 --Ignore leave
--AND DATEPART(YEAR, ts.start_dtm) = @Year
--AND DATEPART(MONTH, ts.start_dtm) = @Month
--accounting months 2012
AND (@month_ref = 81201 AND ts.start_dtm Between '2011-11-28' AND '2012-01-01')
or (@month_ref = 81202 AND ts.start_dtm Between '2012-01-02' AND '2012-01-29')
or (@month_ref = 81203 AND ts.start_dtm Between '2012-01-30' AND '2012-02-26')
or (@month_ref = 81204 AND ts.start_dtm Between '2012-02-27' AND '2012-04-01')
or (@month_ref = 81205 AND ts.start_dtm Between '2012-04-02' AND '2012-04-29')
or (@month_ref = 81206 AND ts.start_dtm Between '2012-04-30' AND '2012-05-27')
or (@month_ref = 81207 AND ts.start_dtm Between '2012-05-28' AND '2012-06-01')
or (@month_ref = 81208 AND ts.start_dtm Between '2012-07-02' AND '2012-07-29')
or (@month_ref = 81209 AND ts.start_dtm Between '2012-07-30' AND '2012-08-26')
or (@month_ref = 81210 AND ts.start_dtm Between '2012-08-27' AND '2012-09-30')
or (@month_ref = 81211 AND ts.start_dtm Between '2012-10-01' AND '2012-10-28')
or (@month_ref = 81212 AND ts.start_dtm Between '2012-10-29' AND '2012-11-25')
GROUP BY tsks.grouping_ref, ttg.description,
DATENAME(MONTH, ts.start_dtm),
DATENAME(YEAR, ts.start_dtm)
ORDER BY grouping_desc
本質上其過濾結果基礎上的日期範圍,然後分組的結果是這樣的:
Job Group | Month | Booked Hours
Test | Feb 12 | 7
然後,用戶在測試點擊,他們會看到預訂了7小時的報告。 我想根據日期範圍進行分組?
我知道這會在本月:
DATENAME(MONTH, ts.start_dtm),
DATENAME(YEAR, ts.start_dtm)
但按日期範圍組只能顯示出來,如果有結果,即測試可能在範圍1,因此它會顯示否則不顯示日期範圍。
任何想法?
謝謝..這對我來說很好。 – 2012-03-13 09:11:29