Ваш выбор использования матрицы должен основываться на том, как данные находятся в вашем наборе данных. Если для каждого отдела есть два отдельных столбца, я бы использовал таблицу с двумя полями. Если есть поле DEPARMENT, которое определяет, к какому отделу принадлежит запись, я бы использовал матрицу и использовал DEPARTMENT в качестве группы столбцов.
Ваша проблема с месяцами заключается в том, что у вас, вероятно, нет таблицы с будущими месяцами, которые ожидают заполнения данными, поэтому вам нужно их сгенерировать.
Чтобы заполнить даты, я бы начал с таблицы дат, которая составляется динамически. Вот кое-что, что я обычно использую, чтобы создать таблицу месяцев. Вы можете привязать даты начала и окончания к вашим параметрам.
DECLARE @START_DATE AS DATE = '2017-01-01'
DECLARE @END_DATE AS DATE = '2018-08-31'
;WITH DATE_RANGE AS (
SELECT CAST(@START_DATE AS DATE) AS MONTH_START
UNION ALL
SELECT CAST(DATEADD(MONTH, 1, MONTH_START) AS DATE)
FROM DATE_RANGE
WHERE YEAR(MONTH_START) < YEAR(@END_DATE)
OR
(
YEAR(MONTH_START) = YEAR(@END_DATE)
AND
MONTH(MONTH_START) < MONTH(@END_DATE)
)
)
SELECT MONTH_START, MONTH_END
INTO #DATE_RANGE
FROM DATE_RANGE