如何在同一行中展示GRAND_TOTAL及各渠道分项金额?
如何修改SQL实现同一ID一行的渠道金额汇总?
问题现象
期望输出每个ID对应一行数据,包含总计及各渠道分项金额:
ID | GRAND_TOTAL | CHANNEL_1 | CHANNEL_2 1 | 100.00 | 50.00 | 50.00 2 | 500.00 | 100.00 | 400.00
但当前执行的查询返回同一ID对应多行,每行仅单个渠道有金额值:
ID | GRAND_TOTAL | CHANNEL_1 | CHANNEL_2 1 | 100.00 | 50.00 | 0 2 | 100.00 | 0 | 50.00 1 | 500.00 | 100.00 | 0 2 | 500.00 | 0 | 400.00
当前使用的SQL语句:
SELECT ID, SUM(Amount) AS GRAND_TOTAL, CASE WHEN CHANNEL_ID = 1 THEN AMOUNT ELSE 0 END CHANNEL_1, CASE WHEN CHANNEL_ID = 2 THEN AMOUNT ELSE 0 END CHANNEL_2 FROM CHANNEL_AMOUNT GROUP BY ID, CHANNEL_ID, AMOUNT
解决方案
修改后的SQL语句如下:
SELECT ID, SUM(Amount) AS GRAND_TOTAL, SUM(CASE WHEN CHANNEL_ID = 1 THEN AMOUNT ELSE 0 END) AS CHANNEL_1, SUM(CASE WHEN CHANNEL_ID = 2 THEN AMOUNT ELSE 0 END) AS CHANNEL_2 FROM CHANNEL_AMOUNT GROUP BY ID
修改说明
- 对渠道金额的CASE表达式添加SUM聚合:原本的CASE仅返回单条记录的渠道金额(非对应渠道则为0),外层包裹SUM后,会将同一ID下对应渠道的所有金额累加,得到该渠道的总金额。
- 简化GROUP BY子句:仅保留
ID作为分组依据,这样查询会按ID聚合所有相关记录,每个ID仅返回一行汇总结果,不会再按渠道或金额拆分。
内容的提问来源于stack exchange,提问作者jymskrl
相关产品推荐
相关产品推荐

