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;
ТИА
Ответы
Ответ 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
Это действительно хороший пример работы механизма выбора/заказа.