不影响输出
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 和三值逻辑部分。
我有一个相当简单的脚本,但是一个字段 (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 和三值逻辑部分。