我正在尝试使用它SELECTwithIN子句,并希望以与列表中的元素相同的顺序返回结果IN。例如:4 H- F0 z$ e# x
SELECT * FROM orders WHERE order_no IN ('B123','B483','B100','B932',...);我希望他们能以同样的顺序回来。理想情况是,如果我能有这样的声明,那就太好了:+ r" E$ t4 ]8 T+ m
SELECT * FROM orders WHERE order_no IN ('B123','B483','B100','B932',...)ORDER BY ('B123','B483','B100','B932',...);我已经看到了使用CASE或DECODE关键字定义了自定义排序的查询示例。然而,在所有这些示例中,它们的顺序都是针对一组预定的选项。由于我的订单完全取决于用户输入的搜索条件,可能有两个选项或100个订购列表…# H2 m# b1 r6 S5 P( Q7 x
有什么想法吗?我不知道一些事情Oracle功能,某种使用方式CASE或DECODE动态集? $ M" l. f/ J! N ' f% B- F) U' f9 H( w# }; P解决方案: & Q; N( F N" L' D) G f6 }
将值插入临时表中,然后将您选择的表添加到表中。3 r! B+ i4 U8 j
然后,您可以在临时列表上自然排序。 & n4 P- _! h9 [$ T( e% RCREATE 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 mytableinner join sort_tableon mytable.mycolumn = sort_table.valueorder by sort_table.sort_order;只需清除临时表COMMIT。