Используя таблицу чисел, вы можете создать даты, чтобы заполнить даты, отсутствующие в вашей таблице. В приведенном ниже запросе я использую master.dbo.spt_values (который ограничен 2048). Тем не менее, это в значительной степени недокументированная таблица и в основном используется Microsoft. Вероятно, лучше создать свою собственную таблицу чисел и не полагаться на нее (см. этот пост ). Я использую это здесь только для того, чтобы показать, как можно использовать такую таблицу.
DECLARE @dtStart DATE
SET @dtStart = dateadd(day, -7, getdate())
SELECT
tblA.dateCompleted,
Count(CASE ReviewType WHEN 1 THEN ReviewType END) AS NonPeak,
Count(CASE ReviewType WHEN 2 THEN ReviewType END) AS AM,
Count(CASE ReviewType WHEN 3 THEN ReviewType END) AS PM
FROM (
SELECT dateadd(day, number, @dtStart) as [dateCompleted]
FROM (
SELECT number
FROM master.dbo.spt_values
WHERE [type] = 'P'
) tbl
WHERE dateadd(day, number, @dtStart) >= @dtStart
) tblA
LEFT JOIN ALAN.dbo.qryPeakReviews tblB ON tblA.dateCompleted = tblB.dateCompleted
and tblB.elementID Like '%SI%'
WHERE tblA.dateCompleted >= DATEADD(day, -7, getdate())
AND tblA.dateCompleted < GETDATE()
GROUP BY tblA.dateCompleted
Использование следующих тестовых данных (обратите внимание, что отсутствуют 1/4 и 1/6) ...
create table #test (dateCompleted date, ReviewType int, elementID varchar(10))
insert into #test
values ('2020-01-01', 1, 'SI')
insert into #test
values ('2020-01-02', 2, 'SI')
insert into #test
values ('2020-01-03', 3, 'SI')
insert into #test
values ('2020-01-05', 1, 'SI')
insert into #test
values ('2020-01-07', 1, 'SI')
Получен следующий вывод (обратите внимание, что 1/4 & 1/6 включены с 0 значениями) ...
Подробнее о таблице master.dbo.spt_values можно прочитать здесь