【问题标题】:Alphabetizing Results after Order By sort排序后按字母顺序排列结果
【发布时间】:2023-03-28 09:06:01
【问题描述】:

我正在尝试编写一个查询,将表的结果排序为 3 个部分,并且我希望每个部分在完成后按字母顺序排列。这是我写的查询:

SELECT * FROM 
(SELECT TOP 100 PERCENT * FROM Hospital WHERE Status = 1 Order By HospitalShortName ) 
As Result Order BY CASE HospitalType 
WHEN 'HOS' THEN 1 WHEN 'NH' THEN 2 ELSE 3 END

所以我的预期结果是这样的:

  • A医院
  • 医院B
  • 医院C
  • A 疗养院

但是,此查询返回的列表分为正确的组,但不是按 HospitalShortName 的字母顺序。我理解为什么上面的查询不起作用,但我不知道从这里去哪里。非常感谢任何帮助。

【问题讨论】:

  • “我明白为什么上面的查询不起作用”只是出于好奇,为什么?
  • 我了解子查询已成功按字母顺序排序,但在按 HospitalType 再次排序后被丢弃。

标签: sql list sorting sql-order-by


【解决方案1】:

不需要子查询。只需将第二列添加到您的外部 ORDER BY 子句即可。

SELECT * 
    FROM Hospital 
    WHERE Status = 1 
    ORDER BY CASE HospitalType 
                 WHEN 'HOS' THEN 1 
                 WHEN 'NH' THEN 2 
                 ELSE 3 
              END, 
              HospitalShortName 

【讨论】:

  • 另外,不仅没有必要,而且无法保证在通过外部查询时,子查询中的顺序在任何意义上都将保持不变。
  • 谢谢,我不知道您可以在使用 CASE 参数作为 Order By 后执行此操作。完美运行。
  • 我的英雄。 正是我要找的。​​span>
最近更新 更多