如何在需要多列时选择不同的列

时间:2014-08-19 22:03:46

标签: sql sql-server-2012 distinct

我的联系人表格中有一个名为“帐户”的列。每个帐户都是针对不同的员工;但是,每个员工都有一些相同的电子邮件地址,或者两个不同的员工可以使用相同的电子邮件地址,如果他们同时与同一个客户合作。

我需要做的是从联系人表中选择所有列,但只返回不同的电子邮件地址。

换句话说,我需要选择所有记录,但我不需要重复记录,只有通过电子邮件地址知道记录是否重复的唯一方法。

我提供了表格和列的快照。

distinct needed

返回记录/行时,我不希望有两行具有相同的电子邮件地址。

2 个答案:

答案 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.IDc2.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