SQL Custom Order By Clause

时间:2014-05-28 10:41:32

标签: sql sql-order-by

一个简短的问题。我有一个查询可以带回2列'描述'和'金额' 在描述中我们有3个结果。

'黄金拥有','青铜 - 没有土地'和'银牌 - 确定/提供'

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

按Asc或Desc命令无法达到此目的。有没有办法自定义Order by子句?

对此有任何帮助将不胜感激 生锈的

5 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:2)

尝试使用CASE声明:

ORDER BY ( CASE Description
              WHEN 'Gold - owned' THEN 1
              WHEN 'Silver - identified / offered' THEN 2
              WHEN 'Bronze - no land' THEN 3
              ELSE 0
            END)

答案 2 :(得分:2)

通过条款

在您的订单中使用此功能

按照案例说明排序' gold'然后1               什么时候'银'然后2                否则3结束asc

答案 3 :(得分:0)

ORDER BY 中使用 CASE 条款:

ORDER BY 
CASE Description
  WHEN ='Gold - owned' THEN 1
  WHEN = 'Silver - identified / offered' THEN 2
  WHEN = 'Bronze - no land' THEN 3
ELSE 4 END

答案 4 :(得分:-1)

ORDER BY

ORDER BY子句用于按升序或降序顺序对数据进行排序。

默认情况下,如果未提及订单,则按升序排序。

语法:

按asc / desc顺序排序 -

SELECT column_name1,column_name2,… column_nameN   FROM table_name WHERE condition ORDER BYcolumn_name [ASC | DESC];

示例:

SELECT CustomerId , Name FROM customer_details WHERE CustomerId> 0 ORDER BY CustomerId;

http://academy.comingweek.com/sql-orderby/