Задать вопрос
  • Как в одной строчке выдачи вывести вывести отобранные по разным критериям значения?

    @dobromyra
    Для такой выборки нужно использовать соединение 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] добавился бы как еще один атрибут группировки, но на мой взгляд это как-то костыльно, поэтому вынесла в отдельный запрос
    Ответ написан
    Комментировать