在 SSRS 上的 where 子句的指定字段中包含 NULL 值



我正在学习SQL,所以要温柔。如果我在我的 where 子句中指定了一个特定角色,它只会拉动填充该角色的情况。如何还包含 NULL 值或那些空白角色?

这是现在的 where 子句:

WHERE (dbo.vcases.lawtype = 'My Cases') AND 
(dbo.vcase_parties_people.role_sk = 4001) AND 
**(v1.role_sk = 3940) AND 
(v1.report_ind = 'Y') AND 
(v2.role_sk = 3939) AND 
(v2.report_ind = 'Y')**  AND 
(dbo.vcases.case_type NOT IN ('Case type 1', 'Case type 2')) 

SQL 中的COALESCE()表达式对于在给定列或表达式遇到 NULL 时替换默认值很有用。当查询优化器遇到COALESCE()调用时,它会在内部将该表达式重写为等效的CASE...WHEN表达式。在您的示例查询中,WHERE (COALESCE(v1.role_sk, 3940) = 3940)的操作(和优化(与WHERE (CASE WHEN v1.role_sk IS NOT NULL THEN v1.role_sk ELSE 3940 END = 3940)相同。

由于您的示例特别涉及 WHERE 子句中的条件,因此您可能希望使用 OR 操作,该操作可以比 COALESCE() 表达式更好地优化:WHERE (v1.role_sk = 3940 OR v1.role_sk IS NULL)

这也假设查询中的任何联接都不会筛选出role_sk列为 NULL 的行。

您可以按如下方式编辑代码:

WHERE (dbo.vcases.lawtype = 'My Cases') AND 
(dbo.vcase_parties_people.role_sk = 4001) AND 
(v1.role_sk = 3940 OR v1.role_sk IS NULL) AND 
(v1.report_ind = 'Y') AND 
(v2.role_sk = 3939) AND 
(v2.report_ind = 'Y')  AND 
(dbo.vcases.case_type NOT IN ('Case type 1', 'Case type 2'))

有人建议使用 Coalesce 函数,但在 SQL 中一个好的经验法则是避免在 WHERE 子句中使用函数,因为它会降低表索引的效率。 WHERE 子句中的函数通常会导致索引扫描,而不是更高效的索引查找。

相关内容

  • 没有找到相关文章

最新更新