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

Oracle SQL Developer:如何实现行值累计求和至指定列?

Oracle实现C2列累计求和并填入C3列的方案

嗨,这个需求用Oracle的窗口函数就能完美解决!我分两种常见场景给你说明:

一、直接查询出累计求和结果

如果你只是想查看累计后的结果,不需要修改表数据,用SUM() OVER()窗口函数是最简便的方式:

SELECT 
    S.No,
    C1,
    C2,
    SUM(C2) OVER(ORDER BY S.No) AS C3
FROM 
    你的表名;

原理说明

SUM(C2) OVER(ORDER BY S.No) 会按照S.No的顺序,逐行计算C2的累计总和。对应你的示例:

  • 第1行:仅计算当前行C2的值,结果为10
  • 第2行:10+20=30
  • 第3行:10+20+30=60
  • 第4行:10+20+30+40=100
    完全匹配你期望的结果。

二、更新表中的C3列

如果需要把累计值永久写入C3列,推荐用MERGE语句(效率更高),或者关联子查询的UPDATE语句:

方式1:使用MERGE(推荐大表场景)

MERGE INTO 你的表名 t
USING (
    SELECT 
        S.No,
        SUM(C2) OVER(ORDER BY S.No) AS new_C3
    FROM 你的表名
) src
ON (t.S.No = src.S.No)
WHEN MATCHED THEN
    UPDATE SET t.C3 = src.new_C3;

方式2:使用UPDATE(适合小表)

UPDATE 你的表名 t
SET C3 = (
    SELECT SUM(C2) 
    FROM 你的表名 
    WHERE S.No <= t.S.No
);

注意事项

  • 必须指定ORDER BY S.No:Oracle表本身是无序的,只有明确排序字段,累计求和的顺序才会和你预期一致。
  • 如果S.No存在重复值,需要根据实际业务调整窗口函数的分区逻辑(比如SUM(C2) OVER(PARTITION BY 分组字段 ORDER BY S.No)),不过从你的示例看S.No是唯一的,所以无需额外处理。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 08:19:53