У меня есть запрос, который группирует по дням недели:
SELECT DATENAME(DW,rct.rpt_date) [Day of The Week]
,DATEDIFF(day,CAST(@date_from as DATE),CAST(@date_to AS DATE) [Number]
,COUNT(DISTINCT rct.rpt_date) as [Occurrence / Active]
FROM receipt_summary rct
WHERE rct.rpt_date between CAST(@date_from as DATE) and CAST(@date_to AS DATE)
AND rct.bus_id = 10
GROUP BY DATENAME(DW,rct.rpt_date)
ORDER BY CASE DATENAME(DW,rct.rpt_date)
WHEN 'SUNDAY' THEN 1
WHEN 'MONDAY' THEN 2
WHEN 'TUESDAY' THEN 3
WHEN 'WEDNESDAY' THEN 4
WHEN 'THURSDAY' THEN 5
WHEN 'FRIDAY' THEN 6
WHEN 'SATURDAY' THEN 7 END
Когда я использовал DATEDIFF (wk,@dateFrom,@dateTo) в качестве одного столбца, количество в столбце Number одинаково для всех семь дней. Это не соответствует количеству, которое я намеревался получить, сравнивая счет с использованием бумажного календаря.
Например, в период с 1 декабря 2019 года по 12 марта 2020 года я ожидаю увидеть 15 раз с воскресенья по четверг, в то время как пятницы и субботы должны показывать 14 раз. Столбец Неактивно - это, естественно, вычитание числа - вхождения. В соответствии с вышеуказанной проблемой, воскресенье - четверг показывает 14.
Этот снимок экрана - это то, чего я надеюсь достичь:
![enter image description here](https://i.stack.imgur.com/FIQry.png)
Может кто-нибудь помочь в этом? Где именно я пропустил?
Примечание. Для группировки по дню месяца я знаю, что она похожа по структуре, за исключением замены DATENAME (DW, date) на DATENAME(D,rct.rpt_date) + CASE WHEN DAY IN (1,21,31) Then ...
et c, но насколько она будет отличаться обработка в части DATEDIFF?
ОБНОВЛЕНИЕ Обновленный снимок экрана показывает текущие и ожидаемые результаты:
![Current and expected result](https://i.stack.imgur.com/fp0wD.png)
Это календарь с декабря 2019 года по март 2020 года. Обозначается в полях количество воскресений, понедельников и т. Д. С (дата) по 12 марта 2020 года (дата до).
![Calendar from Dec 2019 to March 2020](https://i.stack.imgur.com/LEfRn.jpg)