2010-11-25 5 views
8

Est-ce que quelqu'un sait comment puis-je écrire un script SQL Server pour vérifier si la table contient un numéro de téléphone en double?Comment puis-je vérifier l'enregistrement en double dans SQL Server

Exemple:

J'ai appelé une table client avec les données suivantes

name telephone 
alvin 0396521254 
alan 0396521425 
amy 0396521425 

Comment puis-je écrire un script dans SQL Server qui peut renvoyer ces dossiers avec le numéro de téléphone double ??

Répondre

20

Pour voir les valeurs des doublons:

SELECT c.telephone 
    FROM CUSTOMER c 
GROUP BY c.telephone 
    HAVING COUNT(*) > 1 

Pour voir les enregistrements liés dans le tableau pour les doublons:

SELECT c.* 
    FROM CUSTOMER c 
    JOIN (SELECT c.telephone 
      FROM CUSTOMER c 
     GROUP BY c.telephone 
     HAVING COUNT(*) > 1) x ON x.telephone = c.telephone 
+0

@astander: Je ferais mieux si cette migraine allait disparaître. Je dois participer plus, si je dois maintenir mon avance. –

+0

Vous avez un énorme tampon enoug tel qu'il est. Je pense que vous devez prendre un peu de temps X-) –

+0

@astander: Je crains que vous ne soyez dans ma mémoire tampon de 30 Ko - vous devez cesser et renoncer pour que l'équilibre puisse être rétabli. : p –

0

Je suis sûr que quelqu'un va trouver une meilleure solution, mais je vais donner ma façon brute de toute façon.

Si c'était moi, j'utiliserais la fonction COUNT agrégée avec la clause GROUP BY.

Je voudrais écrire une instruction SQL comme:

SELECT telephone, COUNT(telephone)[Entries] FROM table1 
GROUP BY telephone 
HAVING Entries > 1 

qui devrait renvoyer les numéros de téléphone en double avec un compte de la façon dont il existe beaucoup de doublons.

+2

Dire ce que c'est? quelle base de données utilisez-vous qui permet la clause WHERE après GROUP BY, autre que HAVING? –

+1

SQL Server permet WHERE lors de l'utilisation de GROUP BY. Bien que cela se produirait avant l'ensemble de résultats, il serait probablement nécessaire d'avoir dans ce cas (après que l'ensemble de résultats est généré, HAVING sera appliqué). http://technet.microsoft.com/fr-fr/library/ms177673.aspx –

1

Vous pouvez essayer quelque chose comme

;WITH Duplicates AS (
     SELECT Telephone 
     FROM Table 
     HAVING COUNT(1) > 1 
) 
SELECT t.* 
FROm Table t INNER JOIN 
     Duplicates d ON t.Telephone = d.Telephone 

Ou même quelque chose comme

SELECT * 
FROM Table t 
WHERE EXISTS (
        SELECT 1 
        FROM Table tI  
        WHERE tI.Telephone = t.Telephone 
        AND  tI.Name != t.Name 
       ) 
Questions connexes