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

请求编写Oracle查询实现多记录遍历并生成指定预期结果

Oracle查询修正:实现累计求和与空值处理

原查询存在的问题

  • 包含无效的空WHERE子句,属于语法错误
  • 计算累计求和时,DAYSOVER_INT和DAYSOUT_INT的NULL值会被SUM()忽略,导致累计结果不符合预期
  • DAYSOVERX的CASE表达式可以简化为更简洁的写法

修正后的Oracle查询

SELECT
    id,
    ABRV,
    NXTFILL,
    DAYSOUT_INT,
    DAYSOVER_INT,
    TIME,
    NVL(DAYSOVER_INT, 0) AS DAYSOVERX,
    SUM(NVL(DAYSOUT_INT, 0)) OVER (
        PARTITION BY id 
        ORDER BY TIME 
        ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW
    ) AS daysout_sk,
    SUM(NVL(DAYSOVER_INT, 0)) OVER (
        PARTITION BY id 
        ORDER BY TIME 
        ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW
    ) AS daysover_ck
FROM
    test1
-- 若有筛选需求,在此补充WHERE条件,例如 WHERE id > 0
ORDER BY
    ID, TIME;

关键说明

  • 空值处理:用NVL(列名, 0)把NULL转换为0,确保空值不会拉低累计求和的结果
  • 窗口函数逻辑:PARTITION BY id保证每个id独立计算累计值,ORDER BY TIME确保按时间顺序依次累加;ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW是窗口函数的默认范围,也可以省略不写
  • 语法修正:移除了原查询中无效的空WHERE子句,有实际筛选需求时可自行添加条件

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 01:02:33