我想知道计算包含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,我不希望它计算在内。
答案 0 :(得分:2)
只需将WHERE e.ErrorDate is not null
添加到您的查询
答案 1 :(得分:1)
聚合函数(COUNT
,SUM
,ETC)将消除空值,因此如果您希望对它们进行计数,您可以COUNT(*)
计算记录,而不是单个值,或者正如您正在执行ISNULL
/ COALESCE
来替换空值。
如果您只想计算 空值,请将值IS NOT NULL
作为@Derek Kromm建议的计数(*)。
FWIW,我不认为DISTINCT
是必要的,因为如果您有多个空值,您希望计算多个空值,它可能会丢掉您的计数。
答案 2 :(得分:0)
WHILE(SELECT COUNT(*)from sometable WHERE somefield IS NULL)> 0