Для такой выборки нужно использовать соединение outer/cross apply. Для себя я его представляю как «подтягивание» к некоторым ключевым столбцам (здесь это подразделение и период) разномастных данных по принципу 1 столбец = 1 запрос. Таким образом можно смешать в одном запросе значения разных типов, а также использовать агрегатные функции (например, если бы вы захотели посмотреть максимальный и минимальный доход каждого подразделения за период)
Также apply не ограничивает в том, чтобы прицеплять данные только из одной таблицы. По сути, каждый столбец может присоединяться из любой таблицы, если есть, по каким ключам связать ее с основными столбцами, по которым выводится информация
У меня получился следующий запрос:
select
[Подразделение],
[Год_месяц],
isnull([Выручка], 0) as 'Выручка',
isnull([Расходы], 0) as 'Расходы',
(isnull([Выручка], 0) - isnull([Расходы], 0)) as 'Разница'
from
(select --выбор уникальных комбинаций "подразделение + период" для того, чтобы было к чему подтягивать следующие столбцы
'Подразделение' = t.departament,
'Год_месяц' = t.year_month
from [table] t
group by t.departament, t.year_month) t1
outer apply -- здесь подтягиваем выручку (знаем статью, то есть тип) к подразделению и периоду
--Не делаю соломок на случай, если выручка для комбинации "подразделение + период" будет не 1 штука
--Можно решить через ту же сумму как для расходов
(select 'Выручка' = [money] from [table] t
where t.departament = t1.[Подразделение]
and t.year_month = t1.[Год_месяц]
and t.type = 'Выручка') t2
outer apply --подтягиваем суммарные значения сумм по тому же принципу соединения с основными столбцами
(select SUM(t.[money]) 'Расходы' from [table] t
where t.departament = t1.[Подразделение]
and t.year_month = t1.[Год_месяц]
and t.type = 'Расходы') t3
Замечу, что при желании можно было бы вытащить выручку в рамках первого запроса, где формируется список подразделений и периодов. Тогда столбец [money] добавился бы как еще один атрибут группировки, но на мой взгляд это как-то костыльно, поэтому вынесла в отдельный запрос