[英]Filtering NULL values in CASE statement
我有以下查詢:
select
CASE WHEN rt.ROLE_TYPE_CD = 'SA' THEN ap.APPL_CD + ' ' + rt.ROLE_TYPE_CD
WHEN ap.APPL_SID = 1 THEN rt.ROLE_TYPE_CD
ELSE NULL
END as dropdownName,
rt.role_type_sid as dropdownID,
rt.actv_ind as active,
'Application Role' as dropdownCatagory
from cdms_role_type rt
INNER JOIN CDMS_APPLICATION ap
ON rt.APPL_SID = ap.APPL_SID
where role_type_cd != 'All Role Types'
**AND (CASE WHEN rt.ROLE_TYPE_CD = 'SA' THEN ap.APPL_CD + ' ' + rt.ROLE_TYPE_CD
WHEN ap.APPL_SID = 1 THEN rt.ROLE_TYPE_CD END ) IS NOT NULL**
我想避免最后一個 AND 條件,並且仍然想擺脫下拉列中的 NULL 值。我該如何 go 呢? 請幫忙
不匹配任何WHEN
子句的CASE
是NULL
,因此只需使用該事實將您的代碼轉換為簡單匹配:
...
where role_type_cd != 'All Role Types'
AND (rt.ROLE_TYPE_CD = 'SA' OR ap.APPL_SID = 1)
沒有辦法避免最后一個AND
,但它相當簡單 - 我不知道你為什么要避免這樣的事情。
注意:使用OR
時,請確保使用括號。 因為AND
優先,沒有括號,A AND B OR C 被解析為 (A AND B) OR C... 不是你想要的。
僅供參考,沒有ELSE
子句的CASE
等同於帶有ELSE NULL
的CASE
,這就是為什么它是NULL
when is 不匹配任何WHEN
子句的原因。
僅過濾掉會產生非空值的記錄:
select
CASE WHEN rt.ROLE_TYPE_CD = 'SA' THEN ap.APPL_CD + ' ' + rt.ROLE_TYPE_CD
ELSE rt.ROLE_TYPE_CD
END as dropdownName,
rt.role_type_sid as dropdownID,
rt.actv_ind as active,
'Application Role' as dropdownCatagory
from cdms_role_type rt
INNER JOIN CDMS_APPLICATION ap
ON rt.APPL_SID = ap.APPL_SID
where role_type_cd != 'All Role Types'
and (rt.ROLE_TYPE_CD = 'SA' or ap.APPL_SID = 1)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.