2010-01-22 70 views
2

我有一個SQL Server查詢需要計算返回的行數,但我需要忽略所有列值都爲NULL的行。某些行對某些列有NULL值,但這沒關係。我只需要篩選出具有所有NULL值的那些。SQL查詢忽略所有具有所有空列的行

現在我正在返回所有行,並使用SqlDataReader迭代返回的行並計算我需要的行。如果可能,我想將其移入查詢本身。

謝謝!

編輯:我所試圖做的是類似這樣的,但我顯然已經很難讓VS SQL編輯器承認我在做什麼:

SELECT COUNT(sd.[ID]) 
FROM [Some Data] sd 
WHERE sd.[Data Name] = 'something' AND ((sd.q1 IS NOT NULL) OR (sd.q2 IS NOT NULL)) 

等。

+0

您的T-SQL代碼將無法運行。你不用'||'指定OR。但是,即便如此,你需要一個AND而不是一個OR。 – 2010-01-22 01:03:22

+0

哎呀,我知道。無論哪種方式,我不想要一個AND。我需要結果來遵循這個表達式。我只是不知道如何在SQL中「說出來」。 – Casey 2010-01-22 01:04:52

回答

4
select count(id) 
from [Some Data] 
where not (Column1 is null and Column2 is null and Column3 is null ...) 
+0

這似乎工作!謝謝。 – Casey 2010-01-22 01:16:16

1

怎麼是這樣的:

SELECT COUNT(*)FROM MyTable的 凡列1不是null,列2 IS NOT NULL和欄3 IS NOT NULL ...

+0

這是行不通的,因爲有一些列是NULL,我想對它們進行計數,而不是那些*不*全爲NULL的列。以我最近的編輯爲例。 – Casey 2010-01-22 01:02:22

1

您已經選擇了一個答案,但這是最正確的,它應該是最快的,因爲SQL引擎可以優化它並「短路」它。

SELECT count(id) 
FROM [Some Data] 
WHERE NOT (COALESCE(Column1,Column2,Column3...) is null) 
+0

我確信SQL Server足夠聰明,可以在我的答案中短路代碼 - 但是你的代碼更加簡潔。希望我能想到它:P – Blorgbeard 2010-01-22 21:54:23

+0

我不確定,我已經看到很多SQL將評估所有元素和語句的情況。當你有像isnumber(col)和cast(col as int)= 1'這樣的東西時,這是一個特別痛苦的事情 – Hogan 2010-01-23 06:54:47