Сортировка в 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));
→ Ссылка