如何在SQL Server 2008中显示与重复电子邮件关联的所有列

时间:2013-03-27 01:11:09

标签: sql sql-server-2008 filter duplicates

我已经做了一些关于寻找过滤重复电子邮件的方法的研究,因此所有列都会显示与这些重复电子邮件相关联的数据,但无法找到答案来帮助我解决这个问题。

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

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)

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

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

谢谢你们,

3 个答案:

答案 0 :(得分: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

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

答案 1 :(得分: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

答案 2 :(得分:0)

行数会有所不同,如果你想得到所涉及的所有欺骗记录的数量,你可以使用 * WITH汇总* ,这将是你的总数...这个数字应该匹配第二个查询的行号...

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