You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 07:06:20