我需要做一个Custom Oracle Sort

时间:2018-04-12 21:54:32

标签: sql oracle sql-order-by

如果这是一个简单的问题,我很抱歉。但是,我在大约一个小时内搜索了答案的高低。

我有一个db_table,我需要对输出到网页中的表进行排序。数据以下列方式存储在db_table中:

   date          Area         Value
   ------        ------      -------
 11-mar-18        middle        10
 11-mar-18        bottom         5
 11-mar-18        top           12

 12-mar-18        top           14
 12-mar-18        bottom         4
 12-mar-18        middle        17

问题是:如何对这些进行排序以产生以下结果:

    date          Area         Value
   ------        ------      -------
 11-mar-18        top           12 
 11-mar-18        middle        10
 11-mar-18        bottom         5 

 12-mar-18        top           14
 12-mar-18        middle        17
 12-mar-18        bottom         4

非常感谢任何帮助。

3 个答案:

答案 0 :(得分:6)

排序区域按字母顺序降序为 order by 的第二个组成部分:

select *
  from db_table
 order by "date", area desc;

正如您所提到的,如果区域有值A,B,C,D,并且他们希望按照C,B,D,A的顺序排序,那么请使用:

select *
  from db_table
 order by "date", decode(area,'C',1,'B',2,'D',3,'A',4);

P.S。特别是,我将日期列放在引号内,因为已经创建了包含"date"列的表,而不是date这不可能作为关键字。

答案 1 :(得分:5)

select *
  from db_table
 order by "date", 
    case 
       when area = 'top' then 1 
       when area = 'middle' then 2
       when area = 'bottom' then 3
       else 4
    end;

请参阅Custom Sort Order

答案 2 :(得分:4)

在大多数情况下,

instr()提供的解决方案比case更短:

select t.*
from t
order by t.date, instr('top,middle,bottom', area)