0

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

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。

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

4

2 回答 2

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
于 2013-06-18T22:02:32.927 回答
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
于 2013-06-18T17:48:46.560 回答