根据共享 ID 查找收入,SQL

Finding revenue based on shared ID's, SQL

我几乎不知道如何问这个问题,或者在 SQL 中是否可行。我在一家销售公司工作,销售代表经常在 "Split Codes" 下彼此共享帐户。我有一个 table 记录所有这些拆分代码和每个人的实际代表代码的支付率。

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

这意味着拆分 100 下的任何业务的 60% 支付给代表 200,40% 支付给代表 201。

我的销售 table 相当通用,相关字段是 "ID,Revenue, etc ,etc",没有提到 ID 是拆分代码还是普通代码。

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

我有第三个 table,所有 Rep_codes 都不是拆分

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

所以很容易 link Rep_Code table 和 Split_Code table 看看每个人什么时候得到什么和支付率对于他们的任何分裂。棘手的部分是我不知道如何将拆分代码下报告的销售数字分配给 SQL 中其所有者的 rep_codes。我可以在任何脚本语言中通过多次查询我的 SQL table 和一些代码来根据每个 Rep_code 的支付百分比手动添加销售额,但是可以我在单个 SQL 查询中执行此操作?我现有的 table 甚至支持这个吗?我不期待一个完整的答案,因为部分内容含糊不清。但我需要帮助弄清楚我应该如何解决这个问题。据我所知,每次我遇到 Split_codes table 中的 ID 时,我都需要为每个 Rep_code 创建额外的行,并根据 [=] 的信息计算收入值35=]??????

我的预期输出将采用销售额 table 的格式。拆分代码不存在并分发给适当的人。并按任何必要的日期期间分组。

ID, sum(Revenue)
200: 0
201: 0
205: 0

假设拆分仅基于基础代表,那么 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;