使用此特定过滤器时,我的T-SQL查询可能导致输出不一致的原因是什么?

use*_*933 1 sql t-sql sql-server

我正在使用SSMS,我有以下T-SQL查询:

USE MyDatabase

SELECT
...
FROM VIEW1

WHERE [ArrivalDate] BETWEEN '2015-01-01' AND '2018-11-30'
AND ([Reason For Stay] = 'SINGL' AND [Total Guest] = 2 AND [Sum of Child] = 0)
AND [Booking type] = 'FIT'
Run Code Online (Sandbox Code Playgroud)

以上查询输出250条记录.

在查询末尾添加以下过滤器输出30条记录:

AND [Title] = 'MR&MRS'
Run Code Online (Sandbox Code Playgroud)

当我将上面的过滤器更改为:

AND [Title] <> 'MR&MRS'
Run Code Online (Sandbox Code Playgroud)

我期待得到220条记录(这是显而易见的),但查询输出188条记录!

在"消息"标签下SSMS,我得到以下内容:

警告:聚合或其他SET操作消除了空值.

这可能会发生什么?如何更正我的T-SQL查询以获得220条记录?

Luk*_*zda 7

你需要处理NULLs:

USE MyDatabase

SELECT
...
FROM VIEW1

WHERE [ArrivalDate] BETWEEN '2015-01-01' AND '2018-11-30'
AND ([Reason For Stay] = 'SINGL' AND [Total Guest] = 2 AND [Sum of Child] = 0)
AND [Booking type] = 'FIT'
AND ([Title] <> 'MR&MRS' OR [Title] IS NULL)
                             -- here
Run Code Online (Sandbox Code Playgroud)

相关:SQL的三值逻辑