Sql 为什么我的case语句不返回my";中的值;否则";条款

Sql 为什么我的case语句不返回my";中的值;否则";条款,sql,string,case,sql-null,Sql,String,Case,Sql Null,我有这段代码,我的ELSE不工作。它应该返回'UNKNOWN',但我仍然在结果中看到空值。发生了什么事 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.N

我有这段代码,我的ELSE不工作。它应该返回'UNKNOWN',但我仍然在结果中看到空值。发生了什么事

      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()


这将返回第一个非空值。用一个常数作为最后一个参数来表示,当t2.NEURO_GRP_2不为空时,它永远不能返回
NULL

可能
当t2.NEURO_GRP_2不为空时,那么t2.NEURO_GRP_1
应该是
当t2.NEURO_GRP_2不为空时,那么t2.NEURO_GRP_
coalesce(t2.NEURO_GRP_2, t6.NEURO_GRP_2, t3.NEURO_GRP_3, 'UNKNOWN')