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

如何按Assets表账户统计Main表交易金额(区分正负)

解决SQL账户交易总额统计的问题

我来帮你修正这个查询,让它准确实现你要的统计逻辑——按Assets表的账户分组,在Main表中出现在Ac1列时加Amt,出现在Ac2列时减Amt。

现有SQL的问题

你当前的查询直接对Main.Amt求和,没有区分账户是在Ac1还是Ac2的位置,而且用OR关联可能会导致重复计算(比如某条交易的Ac1和Ac2是同一个账户时,这条记录会被关联两次,Amt被累加两次,而正确逻辑应该是加一次减一次抵消为0)。

正确的SQL查询

SELECT 
    a.Account,
    a.Descript,
    ROUND(SUM(
        CASE 
            WHEN a.Account = m.Ac1 THEN m.Amt
            WHEN a.Account = m.Ac2 THEN -m.Amt
            ELSE 0
        END
    ), 2) AS TtlAmt
FROM Assets a
LEFT JOIN Main m 
    ON a.Account = m.Ac1 OR a.Account = m.Ac2
GROUP BY a.Account, a.Descript
ORDER BY a.Account;

代码解释

  • CASE语句:核心逻辑,判断当前资产账户在交易中的角色:
    • 如果是交易的Ac1,直接加Amt
    • 如果是交易的Ac2,加-Amt(相当于减去原金额)
    • 没有匹配交易的账户,加0
  • ROUND(...,2):确保结果保留两位小数,和你预期的1000.00格式一致
  • LEFT JOIN:保证Assets表中所有账户都能出现在结果里,哪怕没有任何交易记录(此时TtlAmt为0.00)
  • GROUP BY:按账户编号和描述分组,符合你按每个账户统计的需求

和你Excel公式的对应关系

你用Excel的SUM(SUMIF(...), SUMIF(...)*-1)的思路,和这个SQL里的CASE逻辑完全一致:分别统计账户在Ac1列的总金额(加),以及在Ac2列的总金额(减),最后汇总。

内容的提问来源于stack exchange,提问作者Nick Fleetwood

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 08:50:07