小编典典

SQL自定义子句

sql

一个快速的问题。我有一个查询,该查询带回2列“说明”和“金额”。在说明中,我们有3个结果。

“金-拥有”,“铜-没有土地”和“银-已识别/提供”

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

Order By Asc或Desc无法实现此目的。有没有一种方法可以自定义Order by子句?

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


阅读 177

收藏
2021-04-28

共1个答案

小编典典

在内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 */

由于此操作类似于中的普通列,因此ORDER BY如果您需要按Amount或其他列进行排序,则可以在其后附加一个逗号。

ORDER BY 
  CASE
    WHEN Description = 'Gold '...
  END ASC,
  Amount DESC,
  AnotherColumn ASC
2021-04-28