Я предполагаю, что у вас есть такая таблица данных:
YearNumber | WeekNumber | Account | EmployeeID
----------------------------------------------
2019 | 51 | 101 | 1
2019 | 48 | 101 | 2
И вот результат, который вы хотите увидеть:
YearNumber | WeekNumber | Account | Quantity
----------------------------------------------
2019 | 48 | 101 | 1
2019 | 49 | 101 | 1
2019 | 50 | 101 | 1
2019 | 51 | 101 | 2
2019 | 52 | 101 | 2
2020 | 1 | 101 | 1
2020 | 2 | 101 | 1
2020 | 3 | 101 | 1
Итак, один человек начинает платить на 48 неделе. , один на 51, что означает, что их платежи на счете 101 перекрываются на 51 и 52 неделе, но в другие недели только один человек платит на счет.
Чтобы также ответить на ваш вопрос в комментарии: это - Я думаю, это хороший способ предоставить образец данных и ожидаемый результат, когда вы спросите о SO.
Запрос, который помог мне получить результаты выше:
SELECT
d.Year + IIF((d.Week + n.Number - 1) >= 52, 1, 0) AS Year,
(d.Week + n.Number - 1) % 52 + 1 AS Week,
d.AccountID,
COUNT(d.EmployeeID) AS Quantity
FROM Data d
CROSS APPLY (SELECT * FROM Number n WHERE Number BETWEEN 0 AND 4) n
GROUP BY
d.Year + IIF((d.Week + n.Number - 1) >= 52, 1, 0), -- Year
(d.Week + n.Number - 1) % 52 + 1, -- Week
d.AccountID
Это использует Числовую таблицу , которая в основном представляет собой таблицу, содержащую числа - очень помогает в подобных запросах. Код также имеет минимальную обработку для смены года, но имейте в виду, что вам может понадобиться заботиться о годах, содержащих 53 недели .