我的联系人表格中有一个名为“帐户”的列。每个帐户都是针对不同的员工;但是,每个员工都有一些相同的电子邮件地址,或者两个不同的员工可以使用相同的电子邮件地址,如果他们同时与同一个客户合作。
我需要做的是从联系人表中选择所有列,但只返回不同的电子邮件地址。
换句话说,我需要选择所有记录,但我不需要重复记录,只有通过电子邮件地址知道记录是否重复的唯一方法。
我提供了表格和列的快照。
返回记录/行时,我不希望有两行具有相同的电子邮件地址。
答案 0 :(得分:1)
您可以使用not exists
查询为每封唯一的电子邮件选择ID最低的行。
select c1.*
from dbo.Contacts c1
where not exists (
select 1 from dbo.Contacts c2
where c1.Email = c2.Email
and c2.ID < c1.ID
)
对于ID值变化最大的行c2.ID < c1.ID
到c2.ID > c1.ID
答案 1 :(得分:0)
如果您不关心哪一行,请使用row_number()
。以下是一个任意行:
select a.*
from (select a.*, row_number() over (partition by email order by (select NULL)) as seqnum
from Account a
) a
where seqnum = 1;
如果你想要一个特定的行,例如第一行或最后一行(基于主键),那么只需使用适当的order by
(在partition
子句中):
order by id asc -- get the first
order by id desc -- the the last