TSQL计数函数和明显缺少的NULL值

Fah*_*ahd 2 sql t-sql database count sql-server-2008

根据MSDN,TSQL COUNT(*)函数包括结果中的任何NULL值,除非也使用DISTINCT(来源:http://msdn.microsoft.com/en-us/library/ms175997.aspx)

但是,在我的查询中,忽略NULL值.为了测试这个,我创建了一个小表并用一些数据填充它:

CREATE TABLE tbl (colA varchar(1), colB varchar(10))
INSERT tbl VALUES
('Y', 'test1'),
('Y', 'test2'),
(null, 'test3'),
(null, 'test4'),
('N', 'test5')
Run Code Online (Sandbox Code Playgroud)

然后我对它运行了以下2个查询:

SELECT count(*) FROM tbl
WHERE colA <> 'N'
Run Code Online (Sandbox Code Playgroud)

SELECT DISTINCT colA FROM tbl
WHERE colA <> 'N'
Run Code Online (Sandbox Code Playgroud)

两个结果都忽略NULL值.我分别得到2和'Y'作为结果.我不知道为什么会发生这种情况.有人可以告诉我吗?

在SQL Fiddle中模拟的结果:http://sqlfiddle.com/#!3/8f00b/9

Blo*_*ard 5

空虚很奇怪.

null <> 'N'评估为false.
null = 'N'也评估为false.

您需要显式处理null:

SELECT count(*) FROM tbl
WHERE (colA <> 'N') or (colA is null)
Run Code Online (Sandbox Code Playgroud)