我正在尝试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)
我已经看到使用CASE或DECODE关键字定义某种自定义排序的查询示例.但是,在所有这些例子中,他们的排序是针对一组预定的选项.然而,我的订购完全取决于我的用户输入的搜索条件,因此可能有2个选项列表或100个订单列表...
有任何想法吗?我不知道的某些Oracle功能,或某种使用方式CASE或DECODE动态集?
将值插入临时表并将您的选择加入其中。
然后,您可以对临时表列执行自然顺序。
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.