【问题标题】:SQL ORDER BY Statement logic issueSQL ORDER BY 语句逻辑问题
【发布时间】:2013-12-07 03:18:23
【问题描述】:

我有一个 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
...

【问题讨论】:

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


    【解决方案1】:

    应该是:

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

    在您的情况下,您仅在英语和数学中告诉它“ORDER BY”名称,然后是 Stuyear。

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

    将名称列放在案例之后,它会按照您的预期进行。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-12-23
      • 1970-01-01
      • 2012-01-06
      • 2010-12-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多