sql—在oracle中输入where'in'时如何对结果数据排序

qyzbxkaa  于 2021-08-09  发布在  Java
关注(0)|答案(2)|浏览(398)

我将搜索条件放在where'in'()中,并希望它按顺序显示,因为它是oracle中的'in'。
'in'()中的数据是登录id字段的数据,该字段是唯一的,由字符串类型组成。
例如,查询如下所示,

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

结果必须这样显示,

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

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

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

提前谢谢!

nszi6y05

nszi6y051#

您不能保留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;
slwdgvem

slwdgvem2#

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)

相关问题