Рассмотрим заявку на продажу, в которой у нас есть две таблицы SALES и INTERNAL_SALES.
- Таблица "SALES" указывает количество транзакций, совершенных каждым продавцом вне компании.
- Таблица«INTERNAL_SALES» указывает число транзакций, совершенных каждым торговым представителем внутри компании, другому торговому представителю.
SALES Table : каждая дата имеет одну запись для каждого торгового представителя, даже еслитранзакции равны нулю.
id | day | sales_person | number_of_transactions
1 | 2011-08-01 | Tom | 1000
2 | 2011-08-01 | Ben | 500
3 | 2011-08-01 | Anne | 1500
4 | 2011-08-02 | Tom | 0
5 | 2011-08-02 | Ben | 800
6 | 2011-08-02 | Anne | 900
7 | 2011-08-03 | Tom | 3000
8 | 2011-08-03 | Ben | 0
9 | 2011-08-03 | Anne | 40
INTERNAL_SALES Таблица : в этой таблице регистрируются только те транзакции, которые фактически были выполнены между продавцами.
id | day | sales_person_from | sales_person_to | number_of_transactions
0 | 2011-08-01 | Tom | Ben | 10
1 | 2011-08-01 | Tom | Anne | 20
2 | 2011-08-01 | Ben | Tom | 50
3 | 2011-08-03 | Anne | Tom | 30
4 | 2011-08-03 | Anne | Tom | 30
Теперь проблема заключается всоставлять общее количество транзакций каждого продавца ежедневно.Вот как я это сделал:
SELECT day, sales_person, sum(num_transactions) from
(
SELECT day, sales_person, number_of_transactions As num_transactions FROM sales;
UNION
SELECT day, sales_person_from As sales_person, sum(number_of_transactions) As num_transactions FROM internal_sales GROUP BY day, sales_person_from;
)
GROUP BY day, sales_person;
Это слишком медленно и выглядит некрасиво.Я ищу лучшее решение.Кстати, база данных, используемая в Oracle, и я не имею никакого контроля над базой данных, кроме того, что я могу выполнять запросы к ней.