0

我已经进行了一些研究,寻找一种过滤重复电子邮件的方法,以便所有列都显示与这些重复电子邮件相关的数据,但找不到帮助我解决此问题的答案。

我目前使用以下代码提取数据:

SELECT
    Email, COUNT(Email) AS dup_count

FROM
    [cem_farmers_masterinvitelist].[dbo].InviteList

GROUP BY
    Email

HAVING
    (COUNT(Email) > 1)

Order by Email

然后它给了我xxxxxx的行数。然后,我希望能够提取与这些重复电子邮件相关联的任何数据(列) - 并且只是重复。

SELECT * FROM [marks_party_MasterInvite] .[dbo].[InviteList]
WHERE
    Email in(Select Email FROM [marks_party_MasterInvite].[dbo].[InviteList] GROUP BY Email HAVING COUNT(Email)>1)

我知道我做错了什么,因为行数不匹配。

所以任何帮助将不胜感激!

多谢你们,

4

3 回答 3

1

您想使用窗口函数。下面将计数添加到每一行。然后您可以使用where过滤器来获取所有列:

SELECT il.*
FROM (select il.*, count(*) over (partition by email) as cnt
      from [cem_farmers_masterinvitelist].[dbo].InviteList
     ) il
where cnt > 1
Order by Email

计数不匹配,因为当您获取每一行时,您将获得重复。在第一个查询中,您会收到不同的电子邮件。

于 2013-03-27T01:13:54.733 回答
0

行数会有所不同,如果您想获得所有涉及的重复记录的计数,您可以使用*WITH rollup *,女巫会为您计算总数......这个数字应该与第二个查询的行数匹配......

SELECT
    Email, COUNT(Email) AS dup_count
FROM
    [cem_farmers_masterinvitelist].[dbo].InviteList
GROUP BY
    Email WITH ROLEUP
HAVING
    (COUNT(Email) > 1)
Order by Email
于 2013-03-27T01:37:09.517 回答
0

加入源表,了解您刚刚生成的关于源的知识:

SELECT *
FROM [cem_farmers_masterinvitelist].[dbo].InviteList src

INNER JOIN
(
    SELECT
        Email, COUNT(Email) AS dup_count

    FROM
        [cem_farmers_masterinvitelist].[dbo].InviteList

    GROUP BY
        Email
) qDupes
ON qDupes.email = src.email AND qDupes.dup_count > 1
于 2013-03-27T01:15:09.757 回答