用戶點擊一個月,然後執行該存儲過程。它會檢查總預訂時間和哪些組已被過濾。基於多個日期範圍進行篩選?
| Job Group | Month Booked | Time (hrs) |
Cleaning Jan 7
我有以下SQL:
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
GROUP BY
tsks.grouping_ref, ttg.description,
DATENAME(MONTH, ts.start_dtm),
DATENAME(YEAR, ts.start_dtm)
ORDER BY
grouping_desc
我想基於多個日期範圍過濾。
我想過添加此:
AND ((ts.start_dtm BETWEEN '2011-12-28' AND '2012-01-01')
OR (ts.start_dtm BETWEEN '2012-01-02' AND '2012-01-29'))
但後來意識到它不會有問題,用戶點擊何年何月它仍然會顯示,因爲它會進行或聲明的所有記錄。
我需要什麼樣的東西,是基於該month_ref,如:
CASE WHEN @month_ref = 81201 THEN
AND (ts.start_dtm BETWEEN '2011-12-28' AND '2012-01-01')
END
但case語句需要去只是在WHERE子句後。
我於2012年12月的會計,我需要添加爲case語句,這樣,當用戶點擊三月,它會觸發正確的過濾器。
在數據庫ts.start_dtm
看起來是這樣的:
2011-04-01 00:00:00.000
希望那是足夠的信息,我的第一篇文章?
我堅持寫case語句,並把它放在哪裏,現在一直在努力了幾個小時。
希望你能幫助:)
感謝這個,所以你的代碼片段在我的數據庫創建臨時表? – 2012-02-15 14:28:40
該示例使用臨時表來存儲查詢將運行的日期與yes。您將需要創建一個整數的永久表,讓插入語句工作(假設你不已經有一個) – u07ch 2012-02-16 11:13:57
我的存儲過程似乎是在管理工作室,但該網站似乎並不喜歡之間date工作。任何想法爲什麼? – 2012-02-22 15:58:44