我有一个案例陈述,例如下面的一个有多个结果的陈述。不幸的是,由于前三个结果得到满足,其他选项被忽略了。考虑所有结果的声明是否有某种方式?
,CASE WHEN T.T1_HoNOSCA_Score IS NULL THEN 'Missing T1'
WHEN T.T2_HoNOSCA_Score IS NULL THEN 'Missing T2'
WHEN T.T1HonosValidity IN ('NULL','Invalid 9','Invalid Null')
OR T.T2_HonosValidity IN ('NULL','Invalid 9','Invalid Null') THEN 'Invalid Data'
WHEN T.T1_HoNOSCA_Score IS NULL AND T.T2_HoNOSCA_Score IS NULL THEN 'Missing T1 & T2'
WHEN T.T1_HoNOSCA_Score IS NULL AND T.T1HonosValidity IN ('NULL','Invalid 9','Invalid `enter code here`Null')
OR T.T2_HonosValidity IN ('NULL','Invalid 9','Invalid Null') THEN 'Missing T1 & Invalid Data'
WHEN T.T2_HoNOSCA_Score IS NULL AND T.T1HonosValidity IN ('NULL','Invalid 9','Invalid Null')
OR T.T2_HonosValidity IN ('NULL','Invalid 9','Invalid Null') THEN 'Missing T2 & Invalid Data'
WHEN T.T1_HoNOSCA_Score IS NULL AND T.T2_HoNOSCA_Score IS NULL AND T.T1HonosValidity IN ('NULL','Invalid 9','Invalid Null')
OR T.T2_HonosValidity IN ('NULL','Invalid 9','Invalid Null') THEN 'Missing T1 & T2 & Invalid Data'
ELSE NULL END AS Data_Quality_Type
答案 0 :(得分:2)
您的CASE
语句包含不互斥的布尔表达式。其中一些表达方式比其他表达方式更强。
如果X
暗示Y
,则条件X
被称为更强而不是条件Y
。换句话说,每当Y
为真时,X
都为真。
例如,考虑两个条件:
T.T2_HoNOSCA_Score IS NULL -- Condition 1
和
T.T1_HoNOSCA_Score IS NULL AND T.T2_HoNOSCA_Score IS NULL -- Condition 2
每当满足条件2时,条件1也将被满足,因为条件1是AND
- 用一些额外的标准来形成条件2.因此,条件2强于条件1。
如果您的案例陈述具有与您相同的非互斥条件,则需要从最强到最弱的顺序进行排序。否则,你的弱势条件会“遮蔽”强者,永远不会让他们执行。
答案 1 :(得分:1)
您可以将案例表达解析为一组3个单独的测试,并根据需要加入结果。
该示例在oracle语法中提供。但是,你的dbms将提供类似的字符串格式化函数,否则在纯sql中选择功能相同但不太可读的版本。
, RTRIM (
RTRIM (
SUBSTR(
CASE WHEN T.T1_HoNOSCA_Score IS NULL THEN ' Missing T1 &' ELSE '' END
|| CASE WHEN T.T2_HoNOSCA_Score IS NULL THEN ' Missing T2 &' ELSE '' END
|| CASE WHEN T.T1_HonosValidity IN ('NULL','Invalid 9','Invalid Null')
OR T.T2_HonosValidity IN ('NULL','Invalid 9','Invalid Null')
THEN ' Invalid Data &' ELSE '' END
, 2
)
, '&'
)
)
SQL:
SUBSTR(
CASE WHEN T.T1_HoNOSCA_Score IS NULL THEN ' Missing T1 &' ELSE '' END
|| CASE WHEN T.T2_HoNOSCA_Score IS NULL THEN ' Missing T2 &' ELSE '' END
|| CASE WHEN T.T1_HonosValidity IN ('NULL','Invalid 9','Invalid Null')
OR T.T2_HonosValidity IN ('NULL','Invalid 9','Invalid Null')
THEN ' Invalid Data &' ELSE '' END
, 2
, LENGTH (
CASE WHEN T.T1_HoNOSCA_Score IS NULL THEN ' Missing T1 &' ELSE '' END
|| CASE WHEN T.T2_HoNOSCA_Score IS NULL THEN ' Missing T2 &' ELSE '' END
|| CASE WHEN T.T1_HonosValidity IN ('NULL','Invalid 9','Invalid Null')
OR T.T2_HonosValidity IN ('NULL','Invalid 9','Invalid Null')
THEN ' Invalid Data &' ELSE '' END
) - 3
)