Выделение предложения Выбор предложения производится определенным образом

Мне нужна помощь в написании запроса предложения select .

Например, скажем, у меня есть такой запрос:

select value from some_table order by value asc; 

в результате я получаю следующее:

 1 2 3 4 5 6 7 8 9 10 

но специальный запрос, который я хочу написать, – это тот, который все еще даст мне отсортированные значения, но поместит 5 после 8 .

это означает, что мне нужно, чтобы одно значение было не в порядке.

его можно описать по-другому. скажем, у меня есть две группы чисел (пример): A = {a | 1 <= a <= 118, a! = 78} B = {b | b> 118} У меня есть группа C = AUBU {78}, и мне нужны все эти значения, отсортированные как «A, 78, B»

Предполагая, что значение целое, вы можете сделать следующее:

 SELECT * FROM tbl ORDER BY CASE WHEN value = 5 THEN 8.5 ELSE value END 

Или расширить ответ DCP …

 SELECT * FROM tbl ORDER BY CASE WHEN (Condition for first grouping) THEN 1 WHEN (Condition for second grouping) THEN 2 WHEN (Condition for third grouping) THEN 3 ELSE 4 END 

Вы можете использовать несколько условий в своем заказе:

 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 

Закажите несколько CASE-выражений, чтобы переназначить ваши значения.