我有一个请求,要求在一列上使用自定义顺序返回表结果,并使用辅助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
答案 0 :(得分:3)
select *
from yourTable
order by case when Codes = "A" then 1
when Codes = "C" then 2
when Codes = "X" then 3
when Codes = "D" then 4
when Codes = "F" then 5
else 6
end asc,
IF(Names RLIKE '^[a-z]', 1, 2),
Names
答案 1 :(得分:0)
目前尚不清楚您的问题中发布的结果是否已根据您的需要进行排序。您在文本中谈到了排序顺序,但该示例与所讨论的订单不一致。
如果您的示例数据已排序,那么有一个问题(至少在我看来)自定义排序是a)不按顺序b)Corsair和23AceTail行没有排序与...相同的方向铅雪橇和肉丸排。
假设示例已经排序,自定义排序实际上没有做任何事情或通过它的存在来帮助你,因为它不像产品名称那样具体(不是细粒度),所以没有#t; t如果你使用以下方法,首先要对它进行排序:
SELECT * FROM table ORDER BY
CASE `alpha/numeric`
WHEN 'Aardvark' THEN 0
WHEN 'Convertor' THEN 1
WHEN 'Cee One-Oh-Boom' THEN 2
WHEN '23AceTail' THEN 3
WHEN 'Corsair' THEN 4
WHEN 'Texan' THEN 5
WHEN 'Widow-Maker' THEN 6
WHEN 'Lead Sled' THEN 7
WHEN 'Meatbox' THEN 8
WHEN '21Tail' THEN 9
END
如果我做出了错误的假设,请告诉我,我会修改