SQL ORDER BY语句逻辑问题

Mat*_*att 2 sql sorting sql-order-by sql-server-2008

我有一个Stuyear,Name,Included和%3 + Levels的结果集,我正在尝试ORDER BY,以便结果集按字母顺序显示为英语,数学和所有其他主题.每个主题依次分为年组顺序.

这是我的代码:

ORDER BY CASE NAME 
      WHEN 'English' THEN 0 
      WHEN 'Mathematics' THEN 1 
            ELSE 2 END, 
Stuyear DESC
Run Code Online (Sandbox Code Playgroud)

这导致了这个:

在此输入图像描述

因此,排序的初始部分按预期工作,但之后英语和数学之后的科目不按我的要求排序.例如:

Stuyear    name
11         English
10         English
9          English
11         Mathematics
10         Mathematics
9          Mathematics
11         Art & Design
10         Art & Design
9          Art & Design
...
Run Code Online (Sandbox Code Playgroud)

Fil*_*lva 8

它应该是:

ORDER BY CASE NAME 
  WHEN 'English' THEN 0 
  WHEN 'Mathematics' THEN 1 
        ELSE 2 END, 
  NAME,
  Stuyear DESC
Run Code Online (Sandbox Code Playgroud)

在你的情况下,你只是用英语和数学告诉它'ORDER BY'这个名字,然后是Stuyear.

所有其他"名字"将有2个ORDER BY clause,而你唯一告诉它的是Stuyear之后订购.这样它就不会知道如何对它们进行排序.

将"名称"列放在大小写之后,它将使其按预期执行.