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

问题描述

我有这段代码,但我的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