Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 是否按定义的顺序返回匹配的SQL结果?_C#_Mysql_Sorting - Fatal编程技术网

C# 是否按定义的顺序返回匹配的SQL结果?

C# 是否按定义的顺序返回匹配的SQL结果?,c#,mysql,sorting,C#,Mysql,Sorting,我有一个返回表结果的请求,其中一列上有一个自定义顺序,第二个字母/数字排序(先按字母排序,然后按数字排序) 代码顺序应按A、C、X、D、F排序 更新: 接受了答案,并帮助我找到了解决方案 这就是我的工作: select * from Table ORDER BY CASE WHEN Codes = 'A' Then 0 WHEN Codes = 'C' Then 1 WHEN Codes = 'X' Then 2

我有一个返回表结果的请求,其中一列上有一个自定义顺序,第二个字母/数字排序(先按字母排序,然后按数字排序)

代码顺序应按A、C、X、D、F排序

更新: 接受了答案,并帮助我找到了解决方案

这就是我的工作:

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
用我发现的和发现的


不清楚你在问题中公布的结果是否已经按照你想要的方式排序。您在文本中讨论了排序顺序,但示例与讨论的顺序不一致

如果对示例数据进行了排序,那么(至少在我看来)存在一点问题,即自定义排序a)不符合顺序,b)海盗船和23 Acetail行的排序方向与铅橇和肉丸子行的排序方向不同

假设示例已经排序,自定义排序实际上没有做任何事情,也没有帮助您,因为它没有产品名称那么具体(没有那么细粒度),因此如果您使用以下方法,那么首先对其进行排序没有多大意义:

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

如果我做出了错误的假设,请告诉我,我会修改这个答案。这个答案可能会对你有所帮助:你能用文字解释一下你是如何对这些结果进行排序的吗?我猜你想按自定义排序分组,在“名称”列的这些组中排序,并按每个组中的第一个名称进行总体排序?@MartinBackasch这比尝试对实际为字符串的数值排序更复杂。@juharr我甚至很难解释它,除了我已经有了什么,但这不是分组。。我只需要自定义列的输出按显示的顺序:A、C、X、D、F,然后按字母/数字对Names列进行二次排序。我正在努力按A、C、X、D、F顺序输出。@eaglei22所以你总是想要A、C、X、D、F,不管对应的名称值是什么?这就引出了一个问题,为什么没有按照自定义排序列所需的顺序自然排序的值。也许如果你刚才解释了为什么X不在末尾,那就更清楚了。难道你不想
CASE“Custom Sort”
,而不是
alpha/numeric
?我相信OP想先在自定义排序列上排序,所需的顺序是A、C、X、D、F,然后在alpha/numeric列上排序。@juharr可能,但如前所述,请查看自定义排序C与X中的行顺序。。C按字母/数字降序排序,vs X按字母/数字升序排序。那就messy@JacobKrall不,因为这不符合规范。虽然OP说他想按特定顺序按自定义排序,但他所说的名称无法实现发布的示例。。因此,我们不妨绕过定制sortI同意:我们需要@Eagle22确认他们实际上想要“降序字母数字排序,除了23AceTail,它在Cee One Oh Boom之后排序”。这不会产生指定的输出。。它将“C”行排序为:23AceTail,Corsair。这个例子要求:海盗,23AceTail@CaiusJard有什么问题吗?“23AceTail”在示例输出中排序在“Cee One Oh Boom”之后,但不在您的输出中。我认为这是OP例子中的一个错误,因为在评论中,他们要求“那封信,然后按字母/数字对其对应的名称进行排序”@JacobKrall,我对此很担心。我现在正在测试一个解决方案。它有点难看,比如:
当custom_sort='C'和name='Cee One Oh Boom'时按大小写顺序。。当custom_sort='C'和name='23AceTail'时
。。。
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
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