有可能从'IN'条件子句中保持顺序吗?
我在SO上找到了this question,但在他的示例中,OP已经有了一个排序的“IN”子句。
我的情况不同,'IN'子句的顺序是随机的类似这样:
SELECT SomeField,OtherField
FROM TestResult
WHERE TestResult.SomeField IN (45,2,445,12,789)
我想按(45,2,445,12,789)顺序检索结果。我使用的是Oracle数据库。也许SQL中有一个属性可以用于条件子句,以指定保持子句的顺序。
6条答案
按热度按时间ifmq2ha21#
除非使用ORDER BY子句,否则将没有可靠的排序。
您可以将查询拆分为5个查询,然后将它们合并在一起...
我更信任前一种方法,它可能会执行得更好。
py49o6xq2#
在这种情况下,*Decode函数 * 比 *case表达式 * 更方便:
注意,* 值,位置 * 对(例如 * 445,3 *)出于可读性原因而保持在一起。
vx6bjr1n3#
试试这个:
pw136qt24#
还有一种使用字符串函数的替代方法:
我之所以提供这种方法,是因为您可能会发现维护一个值字符串比维护一个中间表更容易。
q5lcpyga5#
我能够在我的应用程序中使用(使用SQL Server 2016)完成此操作
我使用了一个代码端正则表达式,用一个空格替换了
\b
(单词边界)。重要的是,因为我可以在我的场景中缓存结果,直到下一次更新相关项,所以查询只在创建/修改项时运行,而不是在查看每个项时运行,这有助于最大限度地减少性能损失。
2nc8po8w6#
通过集合(
SYS.ODCINUMBERLIST
是内置集合的一个示例)传入值,然后按集合的顺序对行进行排序:然后,对于样本数据:
输出为:
| 索梅菲尔德|其他领域|
| - ------|- ------|
| 四十五|E级|
| 第二章|A类|
| 四百四十五|G级|
| 十二|C级|
| 七八九|高|
fiddle