Результат предложения Ordering Select определенным образом - PullRequest
4 голосов
/ 28 июля 2010

Мне нужна помощь в написании запроса предложения 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»

Ответы [ 4 ]

9 голосов
/ 28 июля 2010

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

SELECT *
  FROM tbl
ORDER BY
       CASE
         WHEN value = 5 THEN 8.5
         ELSE value
       END
2 голосов
/ 28 июля 2010

Или расширить ответ 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 
2 голосов
/ 28 июля 2010

Вы можете использовать несколько условий в вашем заказе следующим образом:

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
0 голосов
/ 28 июля 2010

Порядок по некоторому CASE-выражению для переназначения ваших значений.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...