我有一个sql server表如下
特定的PersonId可以有超过1封电子邮件,在这种情况下,可以选择其中一个电子邮件地址。如何为每个PersonId选择一封电子邮件,确保如果有首选电子邮件是选定的电子邮件。如果PersonId没有首选电子邮件,则可以选择任何电子邮件。
答案 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”..然后排序(降序)在该列上,首先是最高价值。再来一次,拿第一个。