Сортировка в Oracle DB
Каким образом можно отсортировать запрос в специфичном порядке, например есть ID 10, 20, 50. Я хочу отсортироваться именно в порядке 10, 50, 20. Покопался в интернете но ответ так и не смог найти...
SELECT
a.department_id,
b.department_name,
a.job_id
FROM HR.EMPLOYEES a
LEFT JOIN HR.DEPARTMENTS b
ON a.department_id = b.department_id
WHERE a.department_id = 10
UNION ALL
SELECT
a.department_id,
b.department_name,
a.job_id
FROM HR.EMPLOYEES a
LEFT JOIN HR.DEPARTMENTS b
ON a.department_id = b.department_id
WHERE a.department_id = 50
UNION ALL
SELECT
a.department_id,
b.department_name,
a.job_id
FROM HR.EMPLOYEES a
LEFT JOIN HR.DEPARTMENTS b
ON a.department_id = b.department_id
WHERE a.department_id = 20;
Ответы (2 шт):
Автор решения: Mike
→ Ссылка
Например можно сделать это так:
SELECT a.department_id, b.department_name, a.job_id
FROM HR.EMPLOYEES a
LEFT JOIN HR.DEPARTMENTS b
ON a.department_id = b.department_id
WHERE a.department_id IN(10, 50, 20)
ORDER BY decode(department_id, 10, 1, 50, 2, 20, 3)
Фактически для order заменяем department_id на порядковый номер, нужный для сортировки.
Автор решения: 0xdb
→ Ссылка
Можно добавить колонку для сортировки с CASE оператором:
select a.department_id, b.department_name, a.job_id,
case a.department_id
when 10 then 1
when 50 then 2
when 20 then 3 end sort
from hr.employees a
left join hr.departments b ON a.department_id = b.department_id
where a.department_id in (10, 50, 20)
order by sort
Если это условие для сортировки используется часто, то обычно такую колонку добавляют невидимой в таблицу:
alter table hr.departments add (sort int invisible as (
case department_id
when 10 then 1
when 50 then 2
when 20 then 3 end));