是否有办法按IN()子句中的值顺序排序? 我有一个选择查询:
Select * from abc where xyz in (a list of values).
我希望结果的排序顺序与括号内的列表相同。
一种方法是我可以将值放在具有递增序列的临时表中,然后连接2个表,然后按顺序排序,但这不是一个好方法。
有办法做到这一点吗?
答案 0 :(得分:1)
不需要临时表(但也不是很漂亮)
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
答案 1 :(得分:1)
一个丑陋的选择是使用DECODE:
Select * from abc
WHERE xyz in (a list of values)
ORDER BY DECODE(xyz, 'val1', 1, 'val2', 2, ...)
答案 2 :(得分:0)
感谢所有答案。
还有另一种方法,类似于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
这也应该有用。您认为哪一个是最佳和最佳的方法?