SQL SUM函数失效问题:按ID汇总佣金未合并且需筛选近一年数据
问题分析与解决方案
你的问题核心出在GROUP BY子句的字段选择上——你把commission_amt和date_id也加到了分组条件里,这会让数据库把每个不同的佣金金额、不同日期的记录都单独分组,自然没法得到同一个fa_id的总佣金。另外,筛选近一年数据的条件可以写得更通用,不用硬编码固定日期。
修正后的SQL语句
SELECT fld.fa_id, SUM(commission_amt) AS 'Commission Amount' FROM [dbo].[fa_dim] fa JOIN [dbo].[product_summary] fld ON fa.fa_id = fld.fa_id WHERE -- 将YYYYMMDD格式的数字date_id转换为日期,筛选近一年数据 CONVERT(DATE, CAST(fld.date_id AS VARCHAR(8)), 112) >= DATEADD(YEAR, -1, GETDATE()) GROUP BY fld.fa_id ORDER BY fld.fa_id
关键修改说明
- 精简GROUP BY字段:只保留需要汇总的维度
fld.fa_id,这样数据库才会把同一个fa_id的所有记录合并计算总佣金。 - 优化日期筛选:把数字格式的
date_id转换为日期类型,用DATEADD动态计算近一年的起始日期,避免每次手动修改硬编码日期。 - 改用显式JOIN:替换原来的隐式逗号连接,让SQL逻辑更清晰,可读性更强。
执行后就能得到你期望的汇总结果:
ID Commission 7 67 8 30
内容的提问来源于stack exchange,提问作者Ushah
相关产品推荐
相关产品推荐

