我正在使用Microsoft SQL Server 2014。
我能够列出重复的电子邮件。
但是我无法列出整个行,其中包含其他字段,例如EmployeeId
,Username
,FirstName
,LastName
等。
SELECT Email,
COUNT(Email) AS NumOccurrences
FROM EmployeeProfile
GROUP BY Email
HAVING ( COUNT(Email) > 1 )
我可以知道如何在包含Email
的表中多次出现的行中列出所有字段吗?
谢谢。
答案 0 :(得分:2)
尝试一下:
WITH DataSource AS
(
SELECT *
,COUNT(*) OVER (PARTITION BY email) count_calc
FROM EmployeeProfile
)
SELECT *
FROM DataSource
WHERE count_calc > 1
答案 1 :(得分:1)
select distinct * from EmployeeProfile where email in (SELECT
Email
FROM EmployeeProfile
GROUP BY Email
HAVING COUNT(*) > 1 )
答案 2 :(得分:1)
with cte as (
select *
, count(1) over (partition by email) noDuplicates
from Demo
)
select *
from cte
where noDuplicates > 1
order by Email, EmployeeId
说明:
我在这里使用了通用表表达式(cte);但您同样可以使用子查询;没关系。
此cte / subquery提取每一行,并包含一个名为noDuplicates的新字段,该字段表示有多少记录具有相同的电子邮件地址(包括记录本身;因此noDuplicates = 1实际上意味着没有重复;而noDuplicates = 2意味着记录本身和1个重复项,或2个具有此电子邮件地址的记录)。使用窗口上的聚合函数计算此字段。您可以在这里阅读窗口功能:https://docs.microsoft.com/en-us/sql/t-sql/queries/select-over-clause-transact-sql?view=sql-server-2017
在外部查询中,我们仅选择noDuplicates大于1的那些记录;也就是说,有多个记录具有相同的邮件地址。
最后,我已经按电子邮件和EmployeeId进行了排序;这样一来,重复项就会一并列出,并按照(大概)创建它们的顺序显示;只是为了使随后处理这些结果的人的生活变得轻松。
答案 3 :(得分:0)
如果grep("[0-9] E", strings, value = TRUE)
是唯一的,那么您可以EmployeeId
:
EXISTS