SQL ORDER BY 语句逻辑问题

标签 sql sql-server-2008 sorting sql-order-by

我有一个 Stuyear、Name、Included 和 %3+ Levels 的结果集,我正在尝试 ORDER BY,以便结果集按字母顺序显示为英语、数学,然后是所有其他科目。每个科目依次按年级排序。

这是我的代码:

ORDER BY CASE NAME 
      WHEN 'English' THEN 0 
      WHEN 'Mathematics' THEN 1 
            ELSE 2 END, 
Stuyear DESC

由此产生:

enter image description here

所以排序的初始部分按预期工作,但随后英语和数学之后的科目没有按照我的要求进行排序。例如:

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/

相关文章:

mysql - 如何修复来自不同组的总和的除法

sql-server-2008 - 找到最接近输入经纬度的经纬度 Sql server 2008

python - 基本市场篮子/推荐分析问题

sql - 创建按天分组的提要(以下)和最近在 ruby​​ on rails 上订购的用户

sql - 如何应用目录中的所有 sql 文件?

sql - 以下哪些值不在表中?

sql - SQL Server 是否支持 IS DISTINCT FROM 子句?

sql - 数据库表名 : Plural or Singular

mysql - 按自定义顺序对包含字母和符号的值进行排序

ruby - sort 和 sort_by 之间的细微差别