如何通过自连接关联批发零售数据并统计Builder/Dealer渠道销量?
需求说明
我有一张包含批发和零售数据的表,结构如下:
| Channel | Serial# | Date |
|---|---|---|
| WS-Build | 12345 | 1/1/2019 |
| WS-Dealer | 34567 | 1/5/2021 |
| Retail | 12345 | 1/1/2020 |
| Retail | 34567 | 3/5/2021 |
每个Serial#在表中会出现两次,我需要按Serial#匹配数据,得到如下格式的输出,同时统计通过Builder或Dealer渠道售出的产品数量:
| Serial# | Channel | WholesaleDate | Retail Date |
|---|---|---|---|
| 12345 | WS-Build | 1/1/2019 | 1/1/2020 |
| 34567 | WS-Dealer | 1/5/2021 | 3/5/2021 |
请问如何通过自连接同一张表实现该需求?
自连接实现方案
你可以将表分别作为批发数据来源和零售数据来源进行自连接,基于Serial#关联对应记录,同时筛选目标渠道的数据,具体SQL语句如下:
SELECT w.Serial# AS "Serial#", w.Channel AS "Channel", w.Date AS "WholesaleDate", r.Date AS "Retail Date" FROM your_table_name w JOIN your_table_name r ON w.Serial# = r.Serial# WHERE w.Channel IN ('WS-Build', 'WS-Dealer') AND r.Channel = 'Retail';
逻辑说明
- 给表设置两个别名:
w代表批发数据(Wholesale),r代表零售数据(Retail) - 通过
w.Serial# = r.Serial#将同一序列号的批发、零售记录关联 WHERE子句精准筛选:只保留批发渠道为WS-Build/WS-Dealer的记录,同时确保关联的是对应序列号的零售记录- 按需选择字段并自定义别名,直接得到目标格式的输出
如果要统计Builder或Dealer渠道的售出数量,基于上述逻辑添加计数即可:
SELECT COUNT(*) AS Wholesale_Sales_Count FROM your_table_name w JOIN your_table_name r ON w.Serial# = r.Serial# WHERE w.Channel IN ('WS-Build', 'WS-Dealer') AND r.Channel = 'Retail';
内容的提问来源于stack exchange,提问作者ppdalal
相关产品推荐
相关产品推荐

