我已经做了一些关于寻找过滤重复电子邮件的方法的研究,因此所有列都会显示与这些重复电子邮件相关联的数据,但无法找到答案来帮助我解决这个问题。
我目前使用以下代码提取数据:
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)
我知道我做错了,因为行数不匹配。
所以任何帮助都将不胜感激!
谢谢你们,
答案 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