【发布时间】:2018-01-09 19:19:40
【问题描述】:
我有一个请求返回表格结果,其中包含一列上的自定义顺序和辅助 Alpha/数字排序(先按 Alpha 排序,然后按数字排序)。
Example table:
Names Codes
21Tail F
Aardvark A
Lead Sled D
Meatbox D
23AceTail C
Cee One-Oh-Boom C
Corsair X
Texan X
Widow-Maker X
Convertor A
output:
Names(alpha/numeric) Codes(Custom Sort)
Aardvark A
Convertor A
Cee One-Oh-Boom C
23AceTail C
Corsair X
Texan X
Widow-Maker X
Lead Sled D
Meatbox D
21Tail F
代码顺序应按A、C、X、D、F排序
更新: 接受的答案,Here 和 here 帮助我找到了解决方案。
这对我有用:
select *
from Table
ORDER BY CASE WHEN Codes = 'A' Then 0
WHEN Codes = 'C' Then 1
WHEN Codes = 'X' Then 2
WHEN Codes = 'D' Then 3
WHEN Codes = 'F' Then 4
Else 5 End,
CASE WHEN NAMES LIKE '[0-9]%' Then 1 Else 0 END,
Names
【问题讨论】:
-
这个答案可能对你有帮助:Jomoos answer
-
您能用文字解释一下您是如何对这些结果进行排序的吗?我猜你想在自定义排序上进行分组,在名称列上的这些组中排序,并按每个组中的名字进行整体排序?
-
@MartinBackasch 这比尝试对实际上是字符串的数值进行排序更复杂。
-
@juharr 除了我已经拥有的方式之外,我什至无法解释它,但它没有分组..我只需要自定义列的输出按显示的顺序排列:A, C、X、D、F,然后按字母/数字对 Names 列进行二次排序。我正在努力按 A、C、X、D、F 顺序输出。
-
@eaglei22 所以你总是想要 A 然后 C 然后 X D 然后 F,不管相应的名称值是什么?它确实引出了一个问题,即为什么您没有可以自然地按您想要的自定义排序列顺序排序的值。也许如果你只是解释为什么 X 不在最后,那么它会更清楚。