我正在使用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的重复项不会被捕获。
任何人都可以建议我如何使用一个查询解决这个问题?
答案 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)