2016-04-06 42 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