当列为NULL时

时间:2013-06-18 17:36:39

标签: oracle plsql null

我有一个好奇的场景,我一直在看最后一小时而且无法理解......

CASE WHEN A.ADMIN IS NULL THEN 0
ELSE
    CASE WHEN NULLIF(A.ADMIN, 0.0) = COALESCE(NULLIF(O.QUANTITY, 0.0),NULLIF(O.STRENGTH, 0.0),NULLIF(O.VOLUME, 0.0),NULLIF(O.DOSE, 0.0)) THEN 1
    ELSE 2
    END
END

所以,问题是A.ADMIN是一个外连接的结果,我永远不会知道它什么时候被填充..但我需要根据表O的第一个非空值来评估它的结果,看看我是否应该发布1或2。

任何帮助表示赞赏!! 克里斯

2 个答案:

答案 0 :(得分:1)

在第一种情况下,

NULL已被滤除。因此,在第二种情况下,您不需要使用NULLIF。 并且COALESCE返回第一个非空值。因此,您无需在那里应用NULLIF。 试试这个: -

CASE WHEN A.ADMIN IS NULL 
   THEN 0
ELSE
   CASE WHEN A.ADMIN = COALESCE(O.QUANTITY,O.STRENGTH,O.VOLUME,O.DOSE) 
        THEN 1
   ELSE 2
   END
END

答案 1 :(得分:1)

搞定了,不得不改变我的想法:

CASE WHEN CMR.ADMIN_DOSAGE = COALESCE(NULLIF(OI.DOSE_QUANTITY, 0.0),NULLIF(OI.STRENGTH,0.0),NULLIF(OI.VOLUME, 0.0),NULLIF(OI.ORDERED_DOSE, 0.0)) THEN 1.00
ELSE 
    CASE WHEN CMR.ADMIN_DOSAGE IS NOT NULL THEN 2.00 END
END