SQL ORDER BY语句逻辑问题

时间:2013-11-22 09:40:18

标签: 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
...

1 个答案:

答案 0 :(得分:8)

应该是:

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

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

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

将“名称”列放在案例之后,它将使其按预期执行。