在SQL中选择特定记录

时间:2012-02-01 10:41:28

标签: sql sql-server tsql

我有一个sql server表如下

  • EMAILID
  • PERSONID
  • 电子邮件
  • IsPreferred

特定的PersonId可以有超过1封电子邮件,在这种情况下,可以选择其中一个电子邮件地址。如何为每个PersonId选择一封电子邮件,确保如果有首选电子邮件是选定的电子邮件。如果PersonId没有首选电子邮件,则可以选择任何电子邮件。

2 个答案:

答案 0 :(得分:2)

select PersonId, EmailId from (
    select 
        PersonId,
        EmailId,
        ROW_NUMBER() over (partition by PersonId order by IsPreferred desc) as rnk
    from myTable
) as t
where t.rnk = 1

答案 1 :(得分:1)

选择“ORDER BY ISPREFERRED DESC”,然后取第一个结果行。

通常,如果以这种方式排序不方便,您可以使用UNION子查询,在UNION的每个部分中使用额外的“常量”值列“1”,“2”..然后排序(降序)在该列上,首先是最高价值。再来一次,拿第一个。