У меня есть 2 таблицы: отделы и продажи. В моей таблице отделов у меня есть идентификатор отдела труда и идентификатор отдела продаж, с которым он связан. Я также хочу, чтобы продажи одного отдела «сводились» к другому отделу. Мне нужна помощь с запросом на "сведение" продаж.
Вот таблицы:
TABLE = Departments
LaborDeptid | AssociatedSalesDept | RollUpTo
1 101 0
2 102 0
3 103 1
4 104 0
TABLE = Sales
Date | Sales | SalesDept
1/1/2014 10.00 101
1/1/2014 10.00 101
1/1/2014 10.00 102
1/1/2014 10.00 102
1/1/2014 10.00 103
1/1/2014 10.00 103
1/1/2014 10.00 104
1/1/2014 10.00 104
Вот результат, который я хотел бы:
OUTPUT
Date | LaborDept | TotalSales
1/1/2014 1 40.00
1/1/2014 2 20.00
1/1/2014 4 20.00
Как видите, отдел труда 1 включает продажи для отделов продаж 101 и 103. Однако я понятия не имею, как это сделать. Запрос на суммирование по дням, по отделам достаточно прост:
select
Date,
LaborDept,
sum(sales) as TotalSales
from sales s
inner join departments d on s.SalesDept = d.AssociatedSalesDept
group by Date,LaborDept`
а как бы мне сделать "свертку"? Я попытался поместить оператор case в соединение следующим образом:
select
sum(sales) as TotalSales,
Date,
LaborDept
from sales s
inner join departments d on s.SalesDept = case when d.RollUpTo <> 0 then
(select AssociatedSalesDept
from departments
where d.RollUpTo = LaborDeptID)
else d.AssociatedSalesDept end
group by Date,LaborDept
но это просто привело к полному падению отдела продаж 103. И это не кажется правильным подходом.