SQL 自定义 Order By 子句

Rus*_*ter 4 sql sql-order-by

一个简单的问题。我有一个查询返回 2 列“描述”和“金额”,在描述中我们有 3 个结果。

“黄金 - 拥有”、“青铜 - 无土地”和“白银 - 已识别/提供”

我希望结果按金、银、铜的顺序显示

按升序或降序排序无法实现此目的。有没有办法自定义 Order by 子句?

对此有任何帮助将不胜感激,谢谢 Rusty

Mic*_*ski 7

在 a 内部CASE,您可以为每个值赋予一个数值并按升序排列。如果需要查询大型表,请考虑添加索引Description以提高排序性能。

ORDER BY
  CASE 
    WHEN Description = 'Gold - owned' THEN 0
    WHEN Description = 'Silver - identified / offered' THEN 1
    WHEN Description = 'Bronze - no land' THEN 2
    ELSE 99 /* Any other value (which you should not have) sorts after all */
  END ASC  /* And don't forget to be explicit about ASC order though it's the default */
Run Code Online (Sandbox Code Playgroud)

由于这与 中的普通列一样工作ORDER BY,因此如果您需要按Amount或其他列排序,可以在其后附加逗号。

ORDER BY 
  CASE
    WHEN Description = 'Gold '...
  END ASC,
  Amount DESC,
  AnotherColumn ASC
Run Code Online (Sandbox Code Playgroud)