不影响输出

NOT IN affecting output

我有一个相当简单的脚本,但是一个字段 (person_name) 有一些测试用户的名字(例如 'John Smith'),因为我想从我正在创建的报告中排除。该字段还有一些空值,我想将其保留在报告中。

我已经输入:

AND person_name NOT IN ('john smith', 'sally brown') 等等

这会从报告中删除名称,但出于某种原因,它还会从 person_name 中删除 NULL 值。如前所述,我想保留 NULL 值。

我的问题是,是否有一个简单的原因导致 NULL 在我开始阻止某些名称后立即从报告中消失?

我对此感到很困惑,如有任何指点,我们将不胜感激。

谢谢。

每当我尝试在 SSRS 中使用 NOT IN/NOT LIKE 类型过滤器时,我总是 运行 遇到很多像这样的古怪情况。在您的表达式中尝试以下内容:

=IIf(IsNothing(Fields!yourfield.Value)=True, "testguy", Fields!yourfield.Value)

而不仅仅是

[yourfield]

保持运算符和值相同。

为了使用 NULL,SQL 使用三值逻辑,这意味着 predicates 可以计算为 True、False 或 Unknown。由于 NULL 标记可以表示当前未知的值或不存在的值,因此将任何内容与 NULL 进行比较都会得出未知的结果。

回到上面的谓词并假设它是 WHERE 子句的一部分,将只返回评估 person_name NOT IN ('john smith', 'sally brown') 为 True 的行。由于 NULL 行的计算结果为未知,因此它们被排除在结果集中。

为确保包含 NULL 行,您可以为它们添加特定检查,例如:

WHERE (person_name NOT IN ('john smith', 'sally brown') OR person_name IS NULL)

另请参阅:他的 ExplainExtended 站点上 this SQL Server Pro article and Quassnoi's great post 的 NULL 和三值逻辑部分。