Поиск дохода на основе общих идентификаторов, SQL - PullRequest
0 голосов
/ 05 марта 2020

Я едва знаю, как задать этот вопрос или возможно ли это в SQL. Я работаю в торговой компании, и представители часто делятся счетами друг с другом в разделе «Разделенные коды». У меня есть таблица, которая документирует все эти разделенные коды и коэффициент выплат для каждого действительного кода представителя.

Split_codes
Split_code, Rep_code, Payout%
100         200       60%
100         201       40%

Это означает, что 60% любого бизнеса, разделенного на 100, получают за представителя 200, а 40% - за 201 представителя.

Моя таблица продаж довольно общая c с соответствующие поля: "ID, Доход и т. д. c, и т. c" без упоминания того, что идентификатор является разделенным или нормальным кодом

Revenue
ID,Revenue,date
100, $100,1/1/2020
200, $200,1/5/2020
201, $150,1/5/2020
205, $100,1/5/2020

У меня есть третья таблица со всеми кодами Rep_Code, которые не являются разбиениями

Rep_Codes
First,Last,RepCode,etc etc 
John, Smith, 200 , ABC,DE 

Так что довольно легко связать таблицу Rep_Code с таблицей Split_Code и посмотреть, когда каждый человек получает то, что и процент выплат за любой из их расколов. Сложность в том, что я не знаю, как распределить номера продаж, указанные под разделенными кодами, в rep_codes их владельцев в SQL. Я могу сделать это на любом языке сценариев, многократно запрашивая у моих таблиц SQL и некоторый код для ручного суммирования продаж, основанных на% выплат к каждому Rep_code, но могу ли я сделать это в одном запросе SQL? Мои существующие таблицы даже поддерживают это? Я не ожидаю полного ответа, поскольку части этого расплывчаты. Но мне нужна помощь, чтобы выяснить, как я должен подходить к проблеме. Из того, что я могу сказать, мне нужно создавать дополнительные строки для каждого Rep_code каждый раз, когда я сталкиваюсь с идентификатором, присутствующим в моей таблице Split_codes, с расчетным значением дохода на основе информации из Split_codes ?????

Мой ожидаемый вывод будет в формате таблицы продаж. с разделенными кодами, не представленными и разосланными соответствующим людям. и сгруппированы по любому необходимому периоду даты.

ID, sum(Revenue)
200: $260
201: $190
205: $100

1 Ответ

1 голос
/ 05 марта 2020

Если предположить, что разделение происходит только на базовых повторениях, тогда для сопоставления и некоторого агрегирования можно использовать left join:

select coalesce(sc.rep_code, r.id) as repcode,
       rc.first, rc.last, sum(r.revenue * coalesce(sc.payout, 1))       
from revenue r left join
     split_codes sc
     on r.id = sc.split_code left join
     rep_codes rc
     on rc.repcode = coalesce(sc.rep_code, r.id)
group by coalesce(sc.rep_code, r.id), rc.first, rc.last;
...