Пользователь нажимает на месяц, и затем эта хранимая процедура выполняется. Он проверяет общее забронированное время и какие группы были отфильтрованы.
| 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'))
Но потом понял, что не имеет значения, в какой месяц пользователь нажал, он все равно покажет все записи, поскольку он выполнит оператор OR.
Мне нужно что-то, основанное на month_ref, например:
CASE WHEN @month_ref = 81201 THEN
AND (ts.start_dtm BETWEEN '2011-12-28' AND '2012-01-01')
END
Но оператор case должен идти сразу после предложения WHERE.
У меня есть около 12 учетных месяцев на 2012 год, которые мне нужно добавить в качестве выписок, чтобы при нажатии пользователем на март запускался правильный фильтр.
В базе данных ts.start_dtm
выглядит так:
2011-04-01 00:00:00.000
Надеюсь, этого было достаточно для моего первого поста?
Я застрял в написании описания дела и где его поставить, пытался часами.
Надеюсь, вы можете помочь:)