2010-04-23 3 views
0

J'ai un problème avec une requête que j'essaie d'exécuter sur certaines données, je suppose que le point de départ est de décrire les données.Problème de syntaxe spécifique à T-SQL (Simple sans doute)

Ok donc j'ai une liste d'adresses e-mail, chaque adresse e-mail a un identifiant unique et un numéro de compte

également dans mes tableaux, j'ai un numéro de série qui incrememnts auto, cela va me permettre de cibler email en double adresses

Ce que je dois faire est quelque chose comme ça.

Insert into duplicates 
    (EMAIL,ACCOUNTID,ID) 

SELECT Email,AccountID,ID 
    FROM EmailAddresses 

Group by Email,AccountID 
    Having Count(email)>1 
Order by AccountID, Email 

donc essentiellement je veux sélectionner toutes les adresses e-mail en double et les insérer (et leurs champs relatifs) dans une nouvelle table ventilée par accountID pour que je puisse exécuter quelques querys plus sur elle.

Je me bats avec cela depuis trop longtemps et je pourrais juste utiliser une nouvelle perspective.

Vive à l'avance

+0

Quelle est la syntaxe de message d'erreur? Je ne peux pas sembler remarquer une erreur de syntaxe pour cette requête. – Amry

Répondre

1

Assurez-vous que le champ ID dans la table n'est pas un duplicata champ d'identité et de supprimer l'ordre par article.

Insert into duplicates 
(EMAIL,ACCOUNTID,ID) 
SELECT Email,AccountID, MIN(ID) 
FROM EmailAddresses 
Group by Email,AccountID 
Having Count(email)>1 

Si vous voulez que tous les enregistrements en double, utilisez la sélection proposée par Reine3

+0

C'est exactement ce que je cherchais, merci et à tous ceux qui les ont tous postés et m'ont au moins appris quelque chose! – Yoda

1
SELECT * 
FROM EmailAddresses e1 INNER JOIN 
    (SELECT Email, AccountId 
    FROM EmailAddresses 
    GROUP BY Email, AccountID 
    HAVING Count(Id)>1) Dups 
     ON Dups.Email = e1.Email AND Dups.AccountId = e1.AccountId 
1
SELECT Email, AccountID, ID INTO duplicates 
FROM EmailAddresses E 
WHERE (SELECT COUNT(*) FROM EmailAddresses E1 WHERE E1.Email = E.Email) > 1 
GROUP BY Email, AccountID, ID;