2010-10-07 6 views
0

J'utilise SQL 2005 et ayant une requête simple comme ci-dessous en double piège:Count Distinct avec rétention NULL

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

Maintenant, la question est cette colonne z est parfois d'avoir des valeurs NULL, qui sont ignorés par comptage distinct. En tant que tel, les doublons ayant z comme NULL dans un enregistrement et comme non-NULL dans un autre, ne sont pas piégés.

Quelqu'un peut-il suggérer comment je peux me déplacer avec une seule requête?

Répondre

0

Solution rapide et sale: Remplacer null par valeur factice 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) 

seulement possible, si vous pouvez simuler une valeur nulle factice. Editer: Je suppose que vous utilisez Count (distinct z) parce que les lignes ayant x = y = z ne doivent pas être considérées comme des doublons (pour une raison quelconque). Sinon, pour obtenir tous les doublons de x = utilisation y:

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

Merci nang ... qui est exactement ce que je suis quant à lui .... bien que je ne me sentais vraiment mal d'avoir à prendre cette approche ... maintenant Je ne peux dire à personne comment j'ai fait :-) – SanK

Questions connexes