Выберите Табличные записи в указанном порядке - Oracle - PullRequest
1 голос
/ 13 февраля 2020

У меня есть таблица, скажем - студенты, с 5 записями и идентификаторами (ями) от 1 до 5, теперь я хочу выбрать записи - таким образом, чтобы результат получился таким, как при заданном порядке сортировки столбца идентификаторов

должен быть приведен столбец id - 5,2,1,3,4 (порядок может меняться каждый раз)

есть ли другой способ сделать это в oracle sql?

В mysql у нас есть предложение FIELD () для этого. Я хочу добиться этого в oracle.

Ответы [ 2 ]

0 голосов
/ 13 февраля 2020

Быстрый и грязный способ использует instr():

order by instr(',5,2,1,3,4,', ',' || id ',')

Для обработки значений, не входящих в строку, вы можете преобразовать их в NULL и отсортировать их соответственно:

order by nullif(instr(',5,2,1,3,4,', ',' || id ','), 0) nulls last
0 голосов
/ 13 февраля 2020

Oracle использует организованную в кучу таблицу , что означает, что по умолчанию строки хранятся в произвольном порядке. Однако при выборе строк вы могли бы явно указать условие ORDER BY , чтобы вернуть набор результатов в порядке AS C (по умолчанию) / DES C.

Вы можете использовать DECODE / CASE для настройки сортировки, например:

with data as(
select level num from dual connect by level <=5 
)
select num
from data 
order by case 
 when num = 5 then 1
 when num = 2 then 2
 when num = 1 then 3 
 when num = 3 then 4 
 when num = 4 then 5
end;

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