Я немного сомневаюсь, что вы ищете, но я думаю, что общий подход заключается в том, что вы пытаетесь получить данные за неделю.
Расчет даты
Давайте начнемс некоторыми запросами (и они предполагают установку в США, поскольку днем по умолчанию является понедельник.
SELECT
DATEADD(WEEK, -1, CAST(DATEADD(WEEK, DATEDIFF(WEEK, 0, CAST(GETDATE() AS date)), -1) AS date)) AS TheLastSundayOfTheFullWeek
, DATEADD(WEEK, -1, CAST(DATEADD(WEEK, DATEDIFF(WEEK, 0, CAST(GETDATE() AS date)), +5) AS date)) AS TheLastSaturdayOfTheFullWeek
, CAST(DATEADD(WEEK, DATEDIFF(WEEK, 0, CAST(GETDATE() AS date)), -1) AS date) AS SundayOfTheCurrentWeek
, CAST(DATEADD(WEEK, DATEDIFF(WEEK, 0, CAST(GETDATE() AS date)), +5) AS date) AS SaturdayOfTheCurrentWeek;
Эти запросы генерируют следующие даты
TheLastSundayOfTheFullWeek TheLastSaturdayOfTheFullWeek SundayOfTheCurrentWeek SaturdayOfTheCurrentWeek
2019-06-30 2019-07-06 2019-07-07 2019-07-13
Последняя полная неделя будет проходить с 6/30 по 7/06. Текущая неделя будет определяться как с 7/7 по 7/13.
В зависимости от того, какое определение недели вам нужно, выберитесоответствующая пара столбцов.
Работа с неизвестными
В подобных ситуациях я создаю виртуальную таблицу со всеми ожидаемыми датами (или элементами), которые должен иметь мой отчет. Затем я использую этоустановить соединение с фактической таблицей данных. Поскольку мы не знаем, что найдем какие-либо строки для данной даты, я соединяю таблицы с помощью LEFT JOIN
SELECT
FCR.SubmitterID
, FCR.SubmitterName
, CONVERT(varchar(15), ED.DateReceived, 101) AS DateReceived
, SUM(FCR.ClaimCount) AS TotalCount
FROM
(
-- This logic builds out a list of all the dates that must exist on the report
-- I used the logic for TheLastSundayOfTheFullWeek
SELECT
DATEADD(DAY, D.DayOffset, DATEADD(WEEK, -1, CAST(DATEADD(WEEK, DATEDIFF(WEEK, 0, CAST(GETDATE() AS date)), -1) AS date))) AS DateReceived
FROM
(
-- Generate a series of 7 numbers from 0 t 6
SELECT TOP 7
-1 + ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) AS rn
FROM
sys.all_columns AS AC
) D(DayOffset)
) AS ED
LEFT OUTER JOIN
dbo.FalloutClaimReport AS FCR
ON FCR.DateReceived = ED.DateReceived
GROUP BY
CONVERT(varchar(15), ED.DateReceived, 101)
, FCR.SubmitterID
, FCR.SubmitterName;
, который генерирует набор результатовкак
Мы дУ нас нет данных 30-го или 5-го числа, но в запросе все еще есть записи.Если вам нужны значения по умолчанию, оберните столбец вызовами ISNULL / COALESCE.
DBFiddle версия , чтобы предоставить тестовую изолированную программную среду