Вы можете использовать несколько условий в вашем заказе следующим образом:
ORDER BY (value BETWEEN 1 AND 118) AND value != 78 DESC,
value > 118 DESC,
value
Это гарантирует, что значения, соответствующие первому предикату, идут первыми, затем значения, соответствующие второму предикату, и, наконец, значения, не соответствующие ни одному из предикатов.,Если есть связь (два числа, совпадающие с одним и тем же предикатом), то эти числа сортируются в порядке возрастания.
Обратите внимание, что я не проверял это в Oracle.Может быть необходимо заключить предикат в выражение CASE (CASE WHEN predicate THEN 1 ELSE 0 END)
, чтобы сортировка работала в Oracle.
ORDER BY
(CASE WHEN ((value BETWEEN 1 AND 118) AND value <> 78) THEN 1 ELSE 0 END) DESC,
(CASE WHEN (value > 118) THEN 1 ELSE 0 END) DESC,
value