不影响输出

时间:2015-02-25 16:57:49

标签: reporting-services ssrs-2008-r2

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

我已经投入:

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

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

我的问题是,一旦我开始阻止某些名称,为什么NULL从报告中消失了?

我对此感到困惑,任何指针都会受到赞赏。

感谢。

2 个答案:

答案 0 :(得分:1)

要使用NULL,SQL使用三值逻辑,这意味着predicates可以调整为True,False或Unknown。由于NULL标记可以表示当前未知的值或不存在的值,因此将任何内容与NULL进行比较将评估为未知。

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

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

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

另请参阅:ExplainExtended网站上this SQL Server Pro articleQuassnoi's great post的NULL和三值逻辑部分。

答案 1 :(得分:0)

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

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

而不仅仅是

[yourfield]

保持运算符和值相同。

相关问题