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

Excel嵌套IF(对比当前行与前两行)转Oracle SQL报错求解

报错原因

  • 触发ORA-00920错误的核心是语法违规:OVER()是开窗函数专属语法,你在普通列MSYMBOL后直接追加over (order by MDATE)不符合Oracle语法规则,要取当前行的MSYMBOL值直接引用列名即可,不需要加开窗声明。
  • 额外优化建议:给LAG()函数补充默认值,避免表中前2行查询时返回空值的异常。

修正后的查询语句

select MYTABLE.*,
CASE 
    WHEN MSYMBOL <> lag(MSYMBOL,1,MSYMBOL) over (order by MDATE)
        THEN CASE 
                WHEN lag(MSYMBOL,1,MSYMBOL) over (order by MDATE) <> lag(MSYMBOL,2,lag(MSYMBOL,1,MSYMBOL) over (order by MDATE)) over (order by MDATE)
                THEN lag(MSYMBOL,2,MSYMBOL) over (order by MDATE)
                ELSE lag(MSYMBOL,1,MSYMBOL) over (order by MDATE)
             END
        ELSE MSYMBOL
END as FLAG
from MYTABLE

逻辑说明

修正后的逻辑和你提供的Excel嵌套IF公式完全对齐:

  • 第一层判断对应IF(B8<>B7,...):当前行MSYMBOL和上一行值不等时进入第二层判断,否则直接返回当前行MSYMBOL
  • 第二层判断对应IF(B7<>B6,B6,B7):上一行MSYMBOL和上上行值不等时返回上上行值,否则返回上一行值

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 19:24:03