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

UPDATE语句SET子句用SUM报错:聚合函数不能出现在更新语句的设置列表中

报错原因
  • UPDATE语句的SET子句不支持直接使用SUM、COUNT等聚合函数。聚合函数需要先对数据集做分组计算才能得到结果,直接写在SET赋值位置时,数据库无法确定聚合的分组规则,也无法将聚合结果和待更新的每一行做对应,因此触发报错。
  • 你当前的写法没有提前对wtDocAchL表按关联键idDocAch分组计算PAHT的总和,直接将SUM(wtDocAchL.PAHT)放在SET右侧,不符合SQL语法规范。
解决方法

方案1:预聚合后关联更新(全数据库通用,性能最优)

先通过子查询对wtDocAchL表按idDocAch分组求和,再用聚合后的结果集关联临时表完成更新,代码示例:

UPDATE #tmpDocAcq
SET #tmpDocAcq.PVOptionals = t.sum_paht
FROM #tmpDocAcq
INNER JOIN (
    -- 先按关联键分组计算每个id对应的PAHT总和
    SELECT idDocAch, SUM(PAHT) AS sum_paht
    FROM wtDocAchL
    WHERE wtDocAchL.idNatCost = '2'
    GROUP BY idDocAch
) t ON #tmpDocAcq.idDocAch = t.idDocAch

方案2:关联子查询赋值(适合简单场景)

如果只有单个关联键,也可以直接在SET的赋值位置写关联子查询实现逐行计算:

UPDATE #tmpDocAcq
SET PVOptionals = (
    SELECT SUM(PAHT)
    FROM wtDocAchL
    WHERE wtDocAchL.idDocAch = #tmpDocAcq.idDocAch
      AND wtDocAchL.idNatCost = '2'
)
-- 可选:添加该条件可以只更新有匹配记录的行,避免无匹配时被赋值为NULL
WHERE EXISTS (
    SELECT 1
    FROM wtDocAchL
    WHERE wtDocAchL.idDocAch = #tmpDocAcq.idDocAch
      AND wtDocAchL.idNatCost = '2'
)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 05:57:04