为什么我的 case 语句不返回 "else" 子句中的值?



我有这段代码,我的ELSE不工作。它应该返回"未知",但我仍然在结果中看到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')

这将返回第一个非NULL值。用一个常量作为最后一个参数,它永远不会返回NULL

看起来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()所做的。