gpt4 book ai didi

sql - Oracle 自定义排序

转载 作者:行者123 更新时间:2023-12-04 14:18:37 26 4
gpt4 key购买 nike

查询...

select distinct name from myTable 

返回一系列以以下字符序列开头的值...
ADL*
FG*
FH*
LAS*
TWUP*

其中“*”是字符串的其余部分。

我想按以下方式排序...
ADL*
LAS*
TWUP*
FG*
FH*

但随后我还想按时尚按标准顺序对每个名称进行排序。所以,举个例子,如果我有以下值
LAS-21A
TWUP-1
FG999
FH3
ADL99999
ADL88888
ADL77777
LAS2

我希望它像这样排序......
ADL77777
ADL88888
ADL99999
LAS2
TWUP-1
FG999
FH3

我最初认为我可以通过解码(等等)在解码中使用一些类似的技巧来完成这个过孔,但我一直无法完成它。任何见解?

最佳答案

愚蠢和冗长,但应该工作:

select name, case when substr (name, 1, 3) = 'ADL'  then 1  
when substr (name, 1, 3) = 'LAS' then 2
when substr (name, 1, 4) = 'TWUP' then 3
when substr (name, 1, 2) = 'FG' then 4
when substr (name, 1, 2) = 'FH' then 5
else 6
end SortOrder
from myTable
order by 2, 1;

不确定 6 是否是对其他项目进行排序的正确位置,但很明显如何解决这个问题。至少很清楚发生了什么,即使我不知道你为什么这样做。

编辑 :如果这些是唯一的值,您可以更改第 4 行和第 5 行:
select name, case when substr (name, 1, 3) = 'ADL'  then 1  
when substr (name, 1, 3) = 'LAS' then 2
when substr (name, 1, 4) = 'TWUP' then 3
when substr (name, 1, 1) = 'F' then 4
else 6
end SortOrder
from myTable
order by 2, 1;

另一个编辑 :再一次,如果这些是唯一的值,您可以进一步简化。由于唯一一个乱序的是 F* 系列,您可以将它们强制到最后,并使用实际的第一个字母表示所有其他字母。这更简单,但太多依赖于我偏好的确切值。另一方面,它确实删除了许多看似不必要的对 substr 的调用。 :
select name, case when substr (name, 1, 1) = 'F'  then 'Z'
else name
end SortOrder
from myTable
order by 2, 1;

关于sql - Oracle 自定义排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3048553/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com