以定义的顺序返回匹配的SQL结果?

时间:2017-08-02 13:57:14

标签: c# mysql sorting

我有一个请求,要求在一列上使用自定义顺序返回表结果,并使用辅助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

排序

更新: 已接受的答案,Herehere帮助我找到了解决方案。

这对我有用:

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

2 个答案:

答案 0 :(得分:3)

使用我找到的herehere

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

如果我做出了错误的假设,请告诉我,我会修改