Получите результаты, отсортированные в том же порядке, что и значения в поле in () select - PullRequest
1 голос
/ 30 марта 2012

Есть ли способ упорядочить по порядку значений в предложении IN ()?У меня есть запрос на выборку:

Select * from abc where xyz in (a list of values).

Я хочу, чтобы результат сортировался в том же порядке, что и список в скобках.

Одним из способов является то, что я могу поместить значения ввременная таблица с возрастающей последовательностью, а затем объединить 2 таблицы, а затем упорядочить по последовательности, но это не очень хороший способ.

Есть ли способ сделать это?

Ответы [ 3 ]

1 голос
/ 30 марта 2012

Один ужасный вариант - использовать DECODE:

Select * from abc 
WHERE xyz in (a list of values) 
ORDER BY DECODE(xyz, 'val1', 1, 'val2', 2, ...) 
1 голос
/ 30 марта 2012

Нет необходимости во временной таблице (но не очень красиво)

with list_values (seqnr, id) as (
    select 1, 42 from dual
    union all
    select 2, 43 from dual
    union all
    select 3, 44 from dual
    -- you get the picture
)
select *
from abc
  join list_values lv on abc.xyz = lv.id
order by lv.seqnr
0 голосов
/ 02 апреля 2012

Спасибо за все ответы. Существует другой подход, похожий на подход a_horse_with_no_name:

with t as 
(select t.*, rownum r from table (sys.odcinumberlist(val1, val2, val3...)) t)
select * from abc ac, t where ac.id = column_value and is_active = 'Y' order by r

Это тоже должно работать. Какой из них, ребята, вы считаете лучшим и оптимальным для этого?

...