У меня одна таблица измерений содержит бизнес-единицы и имена сотрудников, как показано ниже.
стол : тусклый
business | emp_name
-----------|-----------
sales | A
sales | B
marketing | C
product | D
IT | E
Кроме того, таблица фактов, которая содержит транзакции между сотрудниками, как показано ниже. таблица: fct
client_emp_name | provider_emp_name | value
-----------------|--------------------|--------
A | C | 10
C | D | 5
C | B | 10
Я хотел бы написать запрос, чтобы найти сумму значений для каждого бизнеса как клиентов, так и поставщиков (включая бизнес-единицы без транзакций) желаемый результат
business | provider_total_value | client_total_value
-----------|-----------------------|---------------------
sales | 10 | 10
marketing | 15 | 0
product | 0 | 5
IT | 0 | 0
Каков наилучший способ структурировать запрос SQL для этого случая? У меня есть следующий запрос, который дает точные результаты, но я не уверен, что это оптимальный способ решить эту проблему.
With provider as (
SELECT
d.business,
SUM(f.value) as provider_total_value
FROM fct as f
right join dimension as d on d.emp_name = f.provider_emp_name
Group by 1
),
client as (
SELECT
d.business,
SUM(f.value) as client_total_value
FROM fct as f
right join dimension as d on d.emp_name = f.client_emp_name
Group by 1
)
Select
p.business,
COALESCE(p.provider_total_value, 0) as provider_total_value,
COALESCE(c.client_total_value, 0) as client_total_value
From provider as p
Inner join client as c on c.business = p.business
Спасибо!