用户点击一个月,然后执行该存储过程。它会检查总预订时间和哪些组已被过滤。基于多个日期范围进行筛选?
| 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