Выбор конкретной записи в SQL - PullRequest
1 голос
/ 01 февраля 2012

У меня есть таблица сервера sql следующим образом

  • EmailId
  • PersonId
  • Электронная почта
  • IsPreferred

У определенного PersonId может быть более 1 электронного письма, и в этом случае МОЖЕТ быть предпочтительным один из адресов электронной почты.Как я могу выбрать одно письмо для каждого PersonId, чтобы убедиться, что выбрано предпочитаемое письмо.Если для PersonId нет предпочтительного адреса электронной почты, можно выбрать любое электронное письмо.

Ответы [ 2 ]

2 голосов
/ 01 февраля 2012
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 голос
/ 01 февраля 2012

Выберите с помощью «ORDER BY ISPREFERRED DESC», затем возьмите первую строку результата.

Как правило, в случае, если упорядочивание не удобно, вы можете использовать UNION подзапросов с дополнительной «константой»столбец значения "1", "2" .. в каждой части UNION, затем сортировать (по убыванию, поэтому наивысшее значение будет первым) в этом столбце.Снова возьмите первый.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...