2013-06-18 26 views
0

我有我一直在寻找的最后一个小时一个奇怪的场景,可以不在身边让我的头......当列是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.

任何帮助赞赏! Chris

+0

所以当a.admin为空,要返回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 
+0

可能希望添加默认值,例如'0.0',到'COALESCE'的尾部。 – HABO

+0

@HABO我认为你是对的。但是如果所有的值都为空,我不知道什么是逻辑。 – chetan

+0

嗨,谢谢你,但是即使在管理员不等于聚合的结果时,它也会在所有情况下返回1。 – cbm64

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 
+0

+1 - 解决了你自己的问题。你也应该继续并接受你自己的答案。 –

+0

CMR.ADMIN_DOSAGE是否可以为NULL? – APC

相关问题