Для отображения ВСЕХ Подразделений, которые должны быть сначала в списке, затем ВЛЕВО СОЕДИНЕНЫ к результатам подсчета. Вам нужно COALESCE () значение, так что если ноль, вместо этого вернет ноль. Что касается последних 3 месяцев, вам просто нужно добавить предложение WHERE для диапазона дат.
Редактировать ... за комментарий. Я сделал еще один шаг вперед, и для каждого деления я создал его в виде кросс-таблицы, чтобы показать деление с 3 столбцами, показывающими количество каждого соответствующего месяца в одной строке ... Итак, имена получающихся столбцов будет таким же, но будет отражать фактическое содержание данных за месяц ... Фактически скорректировано предложение WHERE за 2 месяца ... 2 месяца назад плюс текущее значение равно 3 месяцам.
select
d.DivisionName,
SUM( case when PreQuery.ByMonth = DATENAME(Month, DateAdd( month, -2, GetDate())
then PreQuery.DistinctQuizes else 0 end ) as TwoMonthsAgoCount,
SUM( case when PreQuery.ByMonth = DATENAME(Month, DateAdd( month, -1, GetDate())
then PreQuery.DistinctQuizes else 0 end ) as OneMonthAgoCount,
SUM( case when PreQuery.ByMonth = DATENAME(Month, GetDate())
then PreQuery.DistinctQuizes else 0 end ) as CurrentMonthCount
from
Divisions d
left join
( select count( distinct UQ.QuizID ) DistinctQuizes,
DATENAME(Month, UQ.DateTimeComplete) ByMonth,
d2.DivisionName
from
UserQuiz UQ
JOIN Quiz Q on UQ.QuizID = Q.QuizID
JOIN Employee E on UQ.UserName = E.UserName
JOIN Divisions D2 on E.DivisionCode = D2.SapCode
where
UQ.DateTimeComplete between
DateAdd( month, -2, GetDate()) and GetDate()
group by
d2.DivisionName,
DATENAME(Month, UQ.DateTimeComplete)
) PreQuery
ON d.DivisionName = PreQuery.DivisionName
GROUP BY
d.DivisionName
Используя «GetDate ()», он возвращает любую текущую дату на компьютере. Это будет дата окончания. Первой датой будет арифметика базовой даты ... Используйте функцию DateAdd, добавьте интервал, основанный на месяцах -2 (отрицательный, чтобы перейти НАЗАД), на основе текущей даты.