计数与NULL保留不同

时间:2010-10-07 10:35:36

标签: sql sql-server sql-server-2005

我正在使用SQL 2005并且在下面有一个简单的查询陷阱重复:

SELECT x,y,COUNT(DISTINCT z) AS z_count 
FROM tblA 
GROUP BY x,y 
HAVING (COUNT(DISTINCT z) > 1)

现在的问题是这个列z有时会有NULL值,这会被count distinct忽略。因此,在一个记录中将z作为NULL而在另一个记录中为非NULL的重复项不会被捕获。

任何人都可以建议我如何使用一个查询解决这个问题?

1 个答案:

答案 0 :(得分:0)

快速而肮脏的解决方案:用dummy-null值替换null:

SELECT x,y,COUNT(DISTINCT Coalesce(z, 'dummy-null')) AS z_count 
FROM tblA 
GROUP BY x,y 
HAVING (COUNT(DISTINCT Coalesce(z, 'dummy-null')) > 1)

只有可以伪造虚拟空值才有可能。

编辑:我猜你使用Count(非常z),因为x = y = z的行不应被视为重复(由于某种原因)。 否则,要获得x = y的所有重复项,请使用:

SELECT x,y,COUNT(*) AS dup_count
FROM tblA 
GROUP BY x,y
HAVING (COUNT(*) > 1)