2010-01-22 344 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