SQL Server中按Policy ID分组汇总YTD Value的实现方法
问题描述
原始数据表格:
| Policy ID | YTD Value | Business Type |
|---|---|---|
| 1 | 120 | Taxes |
| 1 | 100 | Taxes |
| 1 | 330 | Taxes |
| 2 | 120 | Taxes |
| 2 | 130 | Taxes |
需要转换为按Policy ID分组,对YTD Value求和后的结果:
| Policy ID | YTD Value | Business Type |
|---|---|---|
| 1 | 550 | Taxes |
| 2 | 250 | Taxes |
尝试过使用DISTINCT和GROUP BY Policy ID,但因为其他字段的存在,仍会显示每条单独记录,询问如何实现正确的分组求和。
解决方案
为什么之前的方法无效?
你之前只按Policy ID分组,但SELECT语句里同时包含了Business Type这个未被聚合处理的字段,数据库无法确定该返回同组内哪一条记录的Business Type值,所以只能保留所有原始记录。
正确实现方式
场景1:同一Policy ID对应的Business Type值完全一致(如你的示例)
把所有非聚合字段都加入GROUP BY子句,同时用SUM()函数对YTD Value求和:
SELECT `Policy ID`, SUM(`YTD Value`) AS `YTD Value`, `Business Type` FROM your_table_name GROUP BY `Policy ID`, `Business Type`;
场景2:同一Policy ID可能对应不同Business Type,但仅需按Policy ID分组
可以用MAX()或MIN()这类聚合函数来保留任意一个Business Type值:
SELECT `Policy ID`, SUM(`YTD Value`) AS `YTD Value`, MAX(`Business Type`) AS `Business Type` FROM your_table_name GROUP BY `Policy ID`;
内容的提问来源于stack exchange,提问作者Lance Lake
相关产品推荐
相关产品推荐

