我有一个 Stuyear、Name、Included 和 %3+ Levels 的结果集,我正在尝试 ORDER BY,以便结果集按字母顺序显示为英语、数学,然后是所有其他科目。每个科目依次按年级排序。
这是我的代码:
ORDER BY CASE NAME
WHEN 'English' THEN 0
WHEN 'Mathematics' THEN 1
ELSE 2 END,
Stuyear DESC
由此产生:
所以排序的初始部分按预期工作,但随后英语和数学之后的科目没有按照我的要求进行排序。例如:
Stuyear name
11 English
10 English
9 English
11 Mathematics
10 Mathematics
9 Mathematics
11 Art & Design
10 Art & Design
9 Art & Design
...
最佳答案
应该是:
ORDER BY CASE NAME
WHEN 'English' THEN 0
WHEN 'Mathematics' THEN 1
ELSE 2 END,
NAME,
Stuyear DESC
在您的情况下,您只用英语和数学告诉它“ORDER BY”名称,然后是 Stuyear。
对于该 ORDER BY 子句
,所有其他“名称”都有 2 个,而您告诉它的唯一内容是之后由 Stuyear 订购。这样它就不知道如何对它们进行排序。
将 Name 列放在 case 之后,它会按照您的预期进行。
关于SQL ORDER BY 语句逻辑问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20141548/