计算包含NULL值的值的最佳实践

时间:2011-08-17 18:09:33

标签: sql sql-server-2005

我想知道计算包含NULL值的值列表的最佳方法是通过执行以下操作吗?

COUNT(ISNLL(Date),'')

我问,因为我有一个while循环,只有在count>运行时才会运行0.看起来这看起来很有效,但这是正确的方法吗?这是我的代码:

WHILE SELECT(Count(*)
             FROM 
              (SELECT 1 AS a
                   FROM dbo.tblrecords r
                   LEFT JOIN dbo.tblError e
                GROUP BY r.RecordId, r.MissingCount
                HAVING r.MissingCount > COUNT(DISTINCT(ISNULL(e.[ErrorDate],''))) > 0

如果e.ErrorDate为NULL,我不希望它计算在内。

3 个答案:

答案 0 :(得分:2)

只需将WHERE e.ErrorDate is not null添加到您的查询

即可

答案 1 :(得分:1)

聚合函数(COUNTSUM,ETC)将消除空值,因此如果您希望对它们进行计数,您可以COUNT(*)计算记录,而不是单个值,或者正如您正在执行ISNULL / COALESCE来替换空值。

如果您只想计算 空值,请将值IS NOT NULL作为@Derek Kromm建议的计数(*)。

FWIW,我不认为DISTINCT是必要的,因为如果您有多个空值,您希望计算多个空值,它可能会丢掉您的计数。

答案 2 :(得分:0)

WHILE(SELECT COUNT(*)from sometable WHERE somefield IS NULL)> 0