C# 是否按定义的顺序返回匹配的SQL结果?
我有一个返回表结果的请求,其中一列上有一个自定义顺序,第二个字母/数字排序(先按字母排序,然后按数字排序) 代码顺序应按A、C、X、D、F排序 更新: 接受了答案,并帮助我找到了解决方案 这就是我的工作: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
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