是否可以保持"IN"条件条款的顺序?
我在SO上发现了这个问题,但在他的例子中,OP已经有了一个排序的"IN"子句.
我的情况不同,'IN'子句是随机顺序的东西是这样的:
SELECT SomeField,OtherField
FROM TestResult
WHERE TestResult.SomeField IN (45,2,445,12,789)
Run Code Online (Sandbox Code Playgroud)
我想以(45,2,445,12,789)的顺序检索结果.我正在使用Oracle数据库.也许SQL中有一个属性我可以使用条件子句来指定保持子句的顺序.
Dav*_*dge 19
除非您使用ORDER BY子句,否则将没有可靠的排序.
SELECT SomeField,OtherField
FROM TestResult
WHERE TestResult.SomeField IN (45,2,445,12,789)
order by case TestResult.SomeField
when 45 then 1
when 2 then 2
when 445 then 3
...
end
Run Code Online (Sandbox Code Playgroud)
您可以将查询拆分为5个查询联合,尽管...
SELECT SomeField,OtherField
FROM TestResult
WHERE TestResult.SomeField = 4
union all
SELECT SomeField,OtherField
FROM TestResult
WHERE TestResult.SomeField = 2
union all
...
Run Code Online (Sandbox Code Playgroud)
我更信任前一种方法,它可能会表现得更好.
在这种情况下,解码函数代替case 表达式很方便:
SELECT SomeField,OtherField
FROM TestResult
WHERE TestResult.SomeField IN (45,2,445,12,789)
ORDER BY DECODE(SomeField, 45,1, 2,2, 445,3, 12,4, 789,5)
Run Code Online (Sandbox Code Playgroud)
请注意,出于可读性原因,value,position对(例如445,3)保持在一起。