问题描述
我有这段代码,但我的ELSE无法正常工作。它应该返回“ UNKNowN”,但我的结果中仍然出现NULL。发生了什么事?
case
when t2.NEURO_GRP_2 is not NULL then t2.NEURO_GRP_1 --ASSIGN GROUP 2 BASED ON PRIMARY DX CODE
when t2.NEURO_GRP_2 is null AND t6.NEURO_GRP_2 IS NOT NULL then t6.NEURO_GRP_2 --ASSIGN GROUP 2 BASED ON CLINIC
when t2.NEURO_GRP_2 is null AND t6.NEURO_GRP_2 IS NULL then t3.NEURO_GRP_3 --ASSIGN GROUP 2 BASED ON PROCEDURE GROUP
ELSE 'UNKNowN'
end AS NEURO_GRP_2,
解决方法
coalesce()
确实可以满足您的要求:
coalesce(t2.NEURO_GRP_2,t6.NEURO_GRP_2,t3.NEURO_GRP_3,'UNKNOWN') S NEURO_GRP_2
原始代码可能的问题是:
-
第一个条件不匹配(您检查一列的空值,但返回另一列)
-
条件已经过时了,没有正确地级联
您可能一直在意思:
case
when t2.NEURO_GRP_2 IS NOT NULL then t2.NEURO_GRP_2
when t6.NEURO_GRP_2 IS NOT NULL then t6.NEURO_GRP_2
when t3.NEURO_GRP_3 IS NOT NULL then t3.NEURO_GRP_3
else 'UNKNOWN'
end AS NEURO_GRP_2
...这正是coalesce()
的作用。
也许您想要coalesce()
:
coalesce(t2.NEURO_GRP_2,'UNKNOWN')
这将返回第一个非NULL
值。用常量作为最后一个参数时,它永远不会返回NULL
。