Задать вопрос
selftrips
@selftrips

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

В базе содержатся записи:
подразделение, год_месяц, статья, деньги
нужно получить отчет, каждая строчка которого имеет вид:
подразделение, год_месяц, деньги при условии что статья= "выручка", СУММА денег при условии что статья = "расходы"), разницы между предыдущими двумя столбцами (то есть выручка- расходы)
выручка только одна запись
затраты могут быть несколько
с учетом того не в каждом месяце может быть выручка или затраты
Спасибо
  • Вопрос задан
  • 89 просмотров
Подписаться 1 Средний Комментировать
Пригласить эксперта
Ответы на вопрос 1
@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] добавился бы как еще один атрибут группировки, но на мой взгляд это как-то костыльно, поэтому вынесла в отдельный запрос
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы