2010-10-07 275 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