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
相关产品推荐
相关产品推荐

