如何在我放入 Oracle 中'IN'位置时对结果数据进行排序



我将搜索条件放在"IN"((的位置,并希望它按顺序显示,因为它是oracle中的"IN"。

'IN'(( 中的数据是LOGIN_ID字段的数据,它是唯一的,由字符串类型组成。

因此,例如,查询将如下所示,

select login_id from table where login_id in ('1234', 'abcd', '12cd')';

结果必须像这样显示,

=======
login_id
=======
'1234'
'abcd'
'12cd' 

错误结果的例子是这样的,

=======
login_id
=======
'abcd'
'12cd'
'1234'

提前感谢!

没有特定的 Oracle 功能。

您可以使用case表达式:

select login_id 
from table 
where login_id in ('1234', 'abcd', '12cd')
order by case login_id
when '1234' then 1
when 'abcd' then 2
when '12cd' then 3
end

decode()可以稍微缩短语法:

order by decode(login_id, '1234', 1, 'abcd', 2, '12cd', 3)

不能保留 IN 列表的顺序,但可以将非常相似的语法与内置集合和TABLE运算符一起使用,将值转换为行,然后按行排序。下面的查询很奇怪,但它避免了将值表达式列表更改为大型CASE语句或其他内容。

select some_table.login_id
from some_table
join
(
select column_value login_id, rownum order_number
from table(sys.odcivarchar2list('1234', 'abcd', '12cd'))
) in_list
on some_table.login_id = in_list.login_id
order by order_number;

相关内容

最新更新