在我的案例声明中,它总是返回else值

时间:2019-05-28 06:38:05

标签: oracle11g

在我的查询中,我使用了一条case语句,该语句始终返回else值,这里是查询:

CASE WHEN CC.IBUS_CODE = null then to_char(vDQ.COA_CAT_ID)  ELSE (vDQ.COA_CAT_ID ||' | '||CC.IBUS_CODE) end AS COA_CAT_ID

here is the output 
COA_CAT_ID
4800 | 
4700 | 31113
4600 | 31112
4500 | 31111
4900 | 


Expected output 
  COA_CAT_ID
    4800 
    4700 | 31113
    4600 | 31112
    4500 | 31111
    4900  

1 个答案:

答案 0 :(得分:1)

case表达式的问题是您正在检查等于null的列-这是不对的。 = null会返回null而不是true或false,这意味着您的case语句将始终放入else节。

相反,您需要使用is null,例如:

CASE WHEN CC.IBUS_CODE is null
          then to_char(vDQ.COA_CAT_ID)
     ELSE (vDQ.COA_CAT_ID ||' | '||CC.IBUS_CODE)
END AS COA_CAT_ID

Here's a db<>fiddle演示问题和解决方法。