SQL Server 2014:如何获取最大交易码对应的金额?
解决SQL分组后出现多行的问题
嘿,这个问题其实是SQL分组查询里的常见坑——当你添加金额聚合函数(比如SUM(Amount))后出现多余行,核心原因是你没有把所有非聚合的字段都加到GROUP BY子句里。
核心规则
SQL的分组逻辑要求:SELECT语句里的每一列,要么是用聚合函数(比如SUM/COUNT/AVG等)计算出来的,要么必须出现在GROUP BY子句中。如果漏了任何一个非聚合列,数据库无法确定如何对这些列进行分组,就会返回不符合预期的多行结果(在严格SQL模式下甚至会直接报错)。
针对你的场景的解决方案
你的原始查询返回的非聚合字段是AccountNumber、FullName、TransCode、TransNo、TransactionDate,所以这些字段必须全部加入GROUP BY子句。举个具体的SQL示例:
SELECT a.AccountNumber, c.FullName, ft.TransCode, ft.TransNo, ft.TransactionDate, SUM(ft.Amount) AS TransactionAmount -- 你新增的金额聚合 FROM Account a JOIN Contact c ON a.ContactID = c.ContactID JOIN FinTrans ft ON a.AccountID = ft.AccountID GROUP BY a.AccountNumber, c.FullName, ft.TransCode, ft.TransNo, ft.TransactionDate;
额外提醒:如果你的需求是按交易类型汇总金额
如果你的真实需求是按每种交易类型(TransCode)来汇总该类型的总金额,而不是按每笔交易(TransNo)展示,那你需要调整SELECT里的字段,只保留分组维度,比如:
SELECT a.AccountNumber, c.FullName, ft.TransCode, -- 仅按交易类型作为分组维度之一 SUM(ft.Amount) AS TotalAmountPerTransType FROM Account a JOIN Contact c ON a.ContactID = c.ContactID JOIN FinTrans ft ON a.AccountID = ft.AccountID GROUP BY a.AccountNumber, c.FullName, ft.TransCode;
这样就能得到每个账户下每种交易类型的总金额,不会出现多余的重复行。
内容的提问来源于stack exchange,提问作者user1777929
相关产品推荐
相关产品推荐

