使用CTE按MASTER_ID分组实现产品计数分列展示的SQL问题
你要的按家庭聚合并输出多产品计数列的需求,用条件聚合+CTE实现逻辑最清晰,也兼容后续新增产品类型的扩展需求,参考实现如下:
WITH FamilyBase AS ( -- 提取每个家庭首行的基础信息,对应ORGL开头字段 SELECT MASTER_ID, CO_CD AS ORGL_CO_CD, PROD_CD AS ORGL_PROD_CD FROM ProductMaster WHERE ROW_NUM = 1 ), ProductCount AS ( -- 按家庭分组统计各产品持有数量 SELECT MASTER_ID, SUM(CASE WHEN PROD_CD = 'STATIONERY' THEN 1 ELSE 0 END) AS STATIONERY_CT, SUM(CASE WHEN PROD_CD = 'PRINTER' THEN 1 ELSE 0 END) AS PRINTER_CT -- 新增产品类型只需在此处追加对应SUM(CASE)列即可 FROM ProductMaster GROUP BY MASTER_ID ) -- 关联基础信息和统计结果得到最终输出 SELECT fb.ORGL_CO_CD, fb.ORGL_PROD_CD, pc.STATIONERY_CT, pc.PRINTER_CT FROM FamilyBase fb INNER JOIN ProductCount pc ON fb.MASTER_ID = pc.MASTER_ID
说明:
- 该写法不需要拆分不同ROW_NUM的关联逻辑,支持任意数量的产品类型扩展
- 输出结果和你给出的期望结构完全匹配,测试样例运行结果如下:
| ORGL_CO_CD | ORGL_PROD_CD | STATIONERY_CT | PRINTER_CT |
|---|---|---|---|
| MAWC | STATIONERY | 1 | 1 |
| MAWC | STATIONERY | 1 | 0 |
内容的提问来源于stack exchange,提问作者KAT
相关产品推荐
相关产品推荐

