SQL Server 2008:如何按RefNum、Year、CorrespVNum分组汇总行数据?
SQL Server 2008 多行重复记录汇总方案
直接使用GROUP BY结合聚合函数SUM()就能解决多行重复记录的汇总问题,不管重复行数是2行还是更多,这个方案都能生效:
SELECT RefNum, Year, CorrespVNum, SUM(Proceeds) AS TotalProceeds, SUM(BaseCost) AS TotalBaseCost FROM 你的数据表名 GROUP BY RefNum, Year, CorrespVNum;
说明
GROUP BY RefNum, Year, CorrespVNum会将这三个字段值完全相同的记录归为一组SUM(Proceeds)和SUM(BaseCost)分别对每组内的对应字段求和,得到你需要的汇总值- 你之前用CTE失效,大概率是CTE里没有正确执行分组逻辑,或者只针对两行的场景写了特定处理逻辑,而
GROUP BY是SQL处理分组汇总的标准方式,适配所有多行重复的情况
如果需要在汇总的同时保留原表的其他字段(比如需要查看每组内的原始记录详情),可以用CTE结合窗口函数SUM() OVER()来实现:
WITH CTE_Grouped AS ( SELECT *, SUM(Proceeds) OVER(PARTITION BY RefNum, Year, CorrespVNum) AS TotalProceeds, SUM(BaseCost) OVER(PARTITION BY RefNum, Year, CorrespVNum) AS TotalBaseCost FROM 你的数据表名 ) -- 如果需要去重显示唯一的汇总结果,添加DISTINCT SELECT DISTINCT RefNum, Year, CorrespVNum, TotalProceeds, TotalBaseCost FROM CTE_Grouped;
这个窗口函数的方式会给每条原始记录都添加上对应组的汇总值,如果只需要唯一的汇总结果,加上DISTINCT即可。
内容的提问来源于stack exchange,提问作者Milla
相关产品推荐
相关产品推荐

