Подтвердить что ты не робот

Oracle: отобразить номер строки с условием "порядок"

Интересно, как я мог напечатать номер строки для оператора sql, где используется порядок. В настоящее время я пробовал ROWNUM, но, как я понимаю, он работает только для несортированного набора результатов.

SELECT rownum, a.lg_id, a.full_name, a.sort_order
  FROM activity_type_lang a
  where a.lg_id = 'en'
  order by a.full_name;

ТИА

4b9b3361

Ответ 1

В дополнение к вложению запроса вы можете использовать аналитическую функцию

SELECT row_number() OVER (ORDER BY a.full_name),
       lg_id,
       full_name,
       sort_order
  FROM activity_type_lang a
 WHERE a.lg_id = 'en'
 ORDER BY a.full_name

Использование аналитических функций также упрощает, если вы хотите изменить способ обработки связей. Вы можете заменить ROW_NUMBER на RANK или DENSE_RANK.

Ответ 2

О. Кажется, я нашел уже решение.

    Select rownum, lg_id, full_name, sort_order from 
(SELECT a.lg_id, a.full_name, a.sort_order
      FROM activity_type_lang a
      where a.lg_id = 'en'
      order by a.full_name);

Ответ 3

rownum применяется перед заказом, поэтому вам нужно переписать свой запрос следующим образом: выберите rownum, xxx. * from ( SELECT a.lg_id, a.full_name, a.sort_order FROM activity_type_lang a где a.lg_id = 'en' порядок по a.full_name ) xxx;

Ответ 4

Здравствуйте. Интересно, как я мог напечатать номер строки для оператора sql, где используя заказ. В настоящее время я пробовал ROWNUM но, как я понимаю, это работает только для несортированный набор результатов.

Быть ясным (кто-то может ошибаться). Он работает (но не так, как вы ожидаете). Проблема заключается в том, что он "прикрепляет" ROWNUM до сортировки, и вы получаете свои записи, но не в последовательных записях ROWNUM. Зачем? Потому что

Первая запись, которая встречает критерии в выражении select учитывая rownum = 1

Это действительно хороший пример работы механизма выбора/заказа.