2016-04-06 34 views
1

我在我的项目中创建了一个总计详细信息,但我在查询中遇到了有关“COUNT”的问题。它也计算null。我想要的是,只计算除此之外的值的列,查询不会计入空列。SQL COUNT(Column)还计算出空值是错误的

这里是我的代码

SELECT COUNT(columnName) as TotalColumnValue FROM tblName 

| columnName| 
|  value| 
|   | 
|  value| 
|  value| 

所以结果数是3,而不是4,因为该值为null。

预先感谢您。

+2

COUNT将不会计入NULL值,它可能在您的数据中为空字符串 –

+0

我同意Abdul。请检查https://msdn.microsoft.com/en-us/library/ms175997.aspx SQL Server Count()函数不会计数NULL值,除非您将它用作COUNT(*)在您的情况下,可能您的空字符串值这与NULL不同。如果你执行一个SELECT语句,你会看到SSMS中的值为NULL,而不是'' – Eralper

回答

4

实际上,所有答案中提到的IS NOT NULL条件不是必需的,因为count(columnName)不会计入空值。所以基本上就足够了,只需要过滤空字符串值,并在计数中指定列。

SELECT COUNT(columnName) as TotalColumnValue 
FROM tblNam 
WHERE columnName <> '' 

注意 - >您对问题的评论问题。 <>表示!=或用文字表示 - NOT EQUAL

+0

<>是什么意思? –

+0

@mark我已经更新了答案。这意味着不平等。 – sagi

+0

我发现你的代码简单而且更有帮助。 :)谢谢@sagi :) –

2

添加功能解决您的问题。 :)

SELECT COUNT(columnName) as TotalColumnValue FROM tblName where columnName is not null 
+0

我已经试过了,但它仍然在计算空列 –

+0

我可以知道你使用的是哪个数据库吗? –

+0

如果该值真的为空,则此代码将起作用。 –

2

您需要排除NULLempty string ''

SELECT COUNT(columnName) as TotalColumnValue FROM tblName 
WHERE columnName <> ''; 
+0

<>是什么意思? –

+0

意味着不等于' –

4

如果值是真的NULL,然后COUNT应当排除该行。也许它不是NULL,而是一个空字符串''。尝试在您的专栏加入NULLIF

CREATE TABLE tbl(columnName VARCHAR(10) NULL); 
INSERT INTO tbl VALUES ('value'), ('value'), ('value'), (''); 

SELECT COUNT(NULLIF(columnName, '')) FROM tbl; 

或者你可以过滤空字符串:

SELECT COUNT(columnName) FROM tbl WHERE columnNameIS NOT NULL AND columnName <> '' 
+0

但是如果你说计数应该排除这一行,为什么要过滤它们? – sagi

+0

只有'NULL'值被'COUNT'排除。空字符串''''不是。所以你必须在'WHERE'子句中过滤它们。 –

+0

是的,你必须筛选空字符串,而不是空值。 – sagi

2

如果你想使用不同的值(不包括重复值)的数量 SELECT DISTINCT COUNT(columnName) AS TotalColumnValue FROM tblName WHERE columnName IS NOT NULL