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

如何将Payments表付款总额更新至Invoice表的PayTotal字段

原有SQL错误原因

  • 聚合子查询未加GROUP BY InvNum_FK:SUM(PayAmt)会把所有付款记录汇总成单条总金额,无法按发票维度拆分对应
  • 聚合子查询未设置别名:JOIN关联时直接调用Payments表名找不到子查询返回的Total、InvNum_FK字段
  • 可选优化:如果用INNER JOIN会跳过没有付款记录的发票,无法将其PayTotal更新为0

适配SQL Server的正确更新语句(匹配你提供的dbo schema)

UPDATE i
SET 
    i.PayTotal = ISNULL(p.Total, 0),
    i.PayCount = ISNULL(p.PayCnt, 0) -- 若不需要更新付款次数字段可删除此行
FROM dbo.Invoices i
LEFT JOIN (
    SELECT 
        InvNum_FK,
        SUM(PayAmt) AS Total,
        COUNT(*) AS PayCnt
    FROM dbo.Payments
    GROUP BY InvNum_FK
) p ON i.InvNum_PK = p.InvNum_FK

执行后结果验证:

  • 发票GLI101已付总额为751.65,付款次数3
  • 发票GLI404已付总额为530.92,付款次数2
  • 其余无付款记录的发票已付总额为0,付款次数0

其他数据库兼容写法参考(MySQL为例)

UPDATE Invoices i
LEFT JOIN (
    SELECT InvNum_FK, SUM(PayAmt) AS Total, COUNT(*) AS PayCnt
    FROM Payments
    GROUP BY InvNum_FK
) p ON i.InvNum_PK = p.InvNum_FK
SET i.PayTotal = IFNULL(p.Total, 0), i.PayCount = IFNULL(p.PayCnt, 0)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 14:24:08