SSRS查询WHERE子句中如何包含指定字段的NULL值
解决SQL WHERE子句包含NULL/空白role的问题
嘿,我懂你现在的需求啦——原来的WHERE子句只会挑出v1.role_sk严格等于3940且report_ind为'Y',还有v2.role_sk严格等于3939且report_ind为'Y'的记录,但你想把那些v1或v2的role_sk是NULL值或者空白字符串的情况也包含进来,对吧?
其实很简单,我们只需要给每个原来的条件组加上OR逻辑,把NULL和空白的判断加进去就行。要注意的是:SQL里判断NULL不能用=,得用IS NULL;空白字符串的话,如果怕有多余空格,可以用TRIM()函数去掉前后空格再判断。
修改后的完整WHERE子句
WHERE (dbo.vcases.lawtype = 'My Cases') AND (dbo.vcase_parties_people.role_sk = 4001) AND ( -- 保留原v1条件,同时加入NULL/空白的情况 ((v1.role_sk = 3940) AND (v1.report_ind = 'Y')) OR (v1.role_sk IS NULL) OR (TRIM(v1.role_sk) = '') ) AND ( -- 保留原v2条件,同时加入NULL/空白的情况 ((v2.role_sk = 3939) AND (v2.report_ind = 'Y')) OR (v2.role_sk IS NULL) OR (TRIM(v2.role_sk) = '') ) AND (dbo.vcases.case_type NOT IN ('Case type 1', 'Case type 2'))
关键部分解释
- 把原来针对
v1的条件用括号包起来,作为第一个匹配选项; - 用
OR连接v1.role_sk IS NULL:专门处理role_sk为NULL的记录; - 再用
OR连接TRIM(v1.role_sk) = '':处理空白(包括带前后空格的空白)的情况,如果你的空白就是完全空的字符串(没有空格),也可以直接写v1.role_sk = ''; v2的部分逻辑和v1完全一样,这样就同时覆盖了「符合原条件」和「role_sk为NULL/空白」的所有情况啦。
内容的提问来源于stack exchange,提问作者LawGirl
相关产品推荐
相关产品推荐

