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

如何用Running Total更新SQL同表的CumPlanned字段?

解决SCURVE表CumPlanned字段的累计值更新问题

问题分析

你之前尝试的方法存在以下问题:

  1. 第二个更新语句中,子查询通过S.id=SCURVE.id仅匹配当前行,导致SUM(DailyPlanned)结果就是当前行的DailyPlanned值,无法得到累计总和。
  2. 第三个CTE使用了partition BY id,这会将每一行单独划分为一个分组,求和结果仍然是单条记录的DailyPlanned值,且CTE名称与原表同名会引发引用歧义。

正确解决方案

使用CTE计算正确的累计值,再通过关联更新原表:

WITH RunningTotals AS (
    SELECT 
        id,
        SUM(DailyPlanned) OVER (ORDER BY id) AS RunningTotal
    FROM SCURVE
)
UPDATE SCURVE
SET CumPlanned = rt.RunningTotal
FROM SCURVE
INNER JOIN RunningTotals rt ON SCURVE.id = rt.id;

这个语句的逻辑是:

  • 先通过CTERunningTotals按id递增顺序计算每一行的累计值RunningTotal
  • 再将原表与CTE通过id关联,把累计值更新到CumPlanned字段

注意事项

你的CumPlanned字段定义为decimal(3,0),最多只能存储999的数值。如果300条DailyPlanned的累计值超过999,会出现溢出错误,建议根据实际数据范围调整字段精度,例如改为decimal(6,0)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 06:09:20