回答

收藏

SQL-根据查询参数保留排序

技术问答 技术问答 248 人阅读 | 0 人回复 | 2023-09-14

我正在尝试使用它SELECTwithIN子句,并希望以与列表中的元素相同的顺序返回结果IN。例如:3 _: A* |& O7 j, o) X/ l& p; r: ^
SELECT * FROM orders WHERE order_no IN ('B123','B483','B100','B932',...);我希望他们能以同样的顺序回来。理想情况是,如果我能有这样的声明,那就太好了:. ~7 T1 t, T* C+ X+ J3 r
SELECT * FROM orders WHERE order_no IN ('B123','B483','B100','B932',...)ORDER BY ('B123','B483','B100','B932',...);我已经看到了使用CASE或DECODE关键字定义了自定义排序的查询示例。然而,在所有这些示例中,它们的顺序都是针对一组预定的选项。由于我的订单完全取决于用户输入的搜索条件,可能有两个选项或100个订购列表…
$ ]2 o: v) f7 j1 X有什么想法吗?我不知道一些事情Oracle功能,某种使用方式CASE或DECODE动态集?1 |+ |! \, P( H  ~& `# p0 L
                                                                ; `8 @% v+ R* I* o7 [; q6 x
    解决方案:                                                                8 f& a. G* p( e* V" A
                                                                将值插入临时表中,然后将您选择的表添加到表中。5 e, i8 i9 F9 a: |+ B8 J( ^
然后,您可以在临时列表上自然排序。
5 N5 M+ G9 L3 o) B1 m, P( _; h, BCREATE 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。
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则