SQL - 基于查询参数保留排序

kaf*_*hau 5 sql oracle

我正在尝试SELECT使用一个IN子句执行,我希望能够以与列表中的元素相同的顺序返回结果IN.例如:

SELECT * FROM orders WHERE order_no IN ('B123', 'B483', 'B100', 'B932', ...);
Run Code Online (Sandbox Code Playgroud)

我希望他们以相同的顺序回来.理想情况下,如果我能得到如下声明,那就太好了:

SELECT * FROM orders WHERE order_no IN ('B123', 'B483', 'B100', 'B932', ...)
ORDER BY ('B123', 'B483', 'B100', 'B932', ...);
Run Code Online (Sandbox Code Playgroud)

我已经看到使用CASEDECODE关键字定义某种自定义排序的查询示例.但是,在所有这些例子中,他们的排序是针对一组预定的选项.然而,我的订购完全取决于我的用户输入的搜索条件,因此可能有2个选项列表或100个订单列表...

有任何想法吗?我不知道的某些Oracle功能,或某种使用方式CASEDECODE动态集?

jen*_*ent 4

将值插入临时表并将您的选择加入其中。

然后,您可以对临时表列执行自然顺序。

CREATE GLOBAL TEMPORARY TABLE sort_table (
  value       VARCHAR2(100),
  sort_order  NUMBER
) ON COMMIT DELETE ROWS;

INSERT INTO sort_table VALUES ('B123',1);
INSERT INTO sort_table VALUES ('B483',2);
... etc. ...

select * from mytable
inner join sort_table
on mytable.mycolumn = sort_table.value
order by sort_table.sort_order;
Run Code Online (Sandbox Code Playgroud)

要清除临时表,只需COMMIT.