2010-10-07 79 views
0

我使用SQL 2005和具有简单的查询,如下陷阱重复:计数DISTINCT与NULL保留

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

现在的问题是,这列z为有时有NULL值,其中获得通过计数明显忽略。因此,将一个记录中的z作为NULL并将另一个记录中的非NULL作为重复项不会陷入困境。

任何人都可以建议如何解决这个与一个单一的查询吗?

回答

0

快速和肮脏的解决方案:如果你可以伪造一个虚拟的空值

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(distinct z),因为具有x = y = z shoud的行不应被认为是重复的(出于某种原因)。 否则,得到的X = Y使用所有重复:

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

感谢馕......这正是我一直与此同时什么....但我确实感到非常糟糕不必采取这种做法现在...我不能告诉任何人我是怎么做的:-) – SanK 2010-10-07 12:08:08