2010-04-23 40 views
0

我有一个查询的问题,我试图在一些数据上运行,我猜想要开始的地方是描述数据。T-SQL的特定语法问题(简单的疑问)

好了,所以我有电子邮件地址的列表,每个电子邮件地址都有一个唯一的ID和帐户ID

而且在我的表我有一组号码,其自动incrememnts,这将使我的目标重复的电子邮件地址

我需要做的就是这样的事情。

Insert into duplicates 
    (EMAIL,ACCOUNTID,ID) 

SELECT Email,AccountID,ID 
    FROM EmailAddresses 

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

所以基本上我想选择所有重复的电子邮件地址,并将它们(和它们的相对场)插入到一个新表通过帐户ID分解,所以我可以在上面运行一些进一步的querys。

我一直在和这个争斗太久,只能用一个全新的视角。

干杯提前

+0

有什么语法错误消息?我似乎无法注意到该查询的任何语法错误。 – Amry 2010-04-23 09:10:06

回答

1

确保在重复表中的ID字段不是标识字段和条款删除订单。

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

如果你希望所有的重复记录,使用select建议通过queen3

+0

这正是我正在寻找的,谢谢你和其他所有贴出所有内容的人,帮助他们,并且至少教会了我一些东西! – Yoda 2010-04-23 14:44:37

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;