如何在临时表中按id分组求和amount并保留rowNo列?
解决方案
要实现按id分组求和amount并确保id唯一,同时保留必填的rowNo列,你需要先完成分组聚合,再对聚合后的结果添加行号。正确的SQL写法如下:
SELECT ROW_NUMBER() OVER(ORDER BY min_date) AS rowNo, id, total_amount INTO #temptbl FROM ( -- 先分组计算每个id的总金额,同时保留用于排序的日期(这里取分组内最早的日期,可根据需求换成MAX(date)) SELECT id, SUM(amount) AS total_amount, MIN(date) AS min_date FROM sales WHERE code = 1000 GROUP BY id ) AS grouped_sales
关键说明
- 内层子查询负责按
id分组,用SUM(amount)计算每个id的总金额,同时通过MIN(date)或MAX(date)获取分组内的日期值,作为外层生成rowNo的排序依据 - 外层查询对分组后的结果集使用
ROW_NUMBER()生成行号,避免了窗口函数与分组逻辑的冲突 - 你之前的写法错误在于直接将未聚合的
amount和窗口函数与GROUP BY id混用,不符合SQL分组查询的规则——SELECT中的非聚合列必须包含在GROUP BY子句中,而窗口函数不能直接参与分组逻辑
内容的提问来源于stack exchange,提问作者Lukis
相关产品推荐
相关产品推荐

