我试图用IN
子句执行SELECT
,我希望能够以与我的列表中IN
列表中的元素相同的顺序返回结果。例如:SQL - 根据查询参数保留排序
SELECT * FROM orders WHERE order_no IN ('B123', 'B483', 'B100', 'B932', ...);
我想让他们以相同的顺序回来。理想情况下,这将会是巨大的,如果我能有这样一个说法:使用CASE
或DECODE
关键字来定义某种自定义排序的查询
SELECT * FROM orders WHERE order_no IN ('B123', 'B483', 'B100', 'B932', ...)
ORDER BY ('B123', 'B483', 'B100', 'B932', ...);
我见过的例子。但是,在所有这些例子中,它们的排序都是针对一组预定的选项。然而,我的排序是完全依赖于什么我的用户进入他们的搜索条件,所以有可能是2个选项列表或100名单通过订购...
任何想法?有些Oracle功能我不知道,或者有些使用CASE
或DECODE
进行动态设置的方法?
在MySQL中,你可以做'ORDER BY FIELD( 'order_no', 'B123', 'B483', 'B100' ...)',但我不知道是否有一个Oracle等价物。 – 2011-05-04 16:18:43
ORDER BY DECODE(order_no,'B123',1,'B483',2,'B100',3,...,1000)'?你显然必须建立正确的'DECODE'子句。 – NPE 2011-05-04 16:26:32