Oracle Order by-Function Based

时间:2016-07-13 20:59:45

标签: sql oracle oracle11g oracle10g

我有一个包含以下4列的表格,其中包含一些示例数据

Aisle | Rack | Level | Position
  1        1       1         1
  1        2       1         2
  2        1       1         1
  2        2       1         1
  2        3       1         1
  3        1       1         1
  3        2       1         1

我希望编写一个可以使用以下

对记录进行排序的查询
  • 首先由Aisle(升序)
  • 然后由Rack(Ascending for a Alyle and 下降等等。 。 。 这是我无法做到的 似乎弄清楚它是否可以在Oracle中实现
  • 然后按Level(升序)
  • 然后按位置(升序)

因此得到的有序行如下

 Aisle | Rack | Level | Position
  1        1       1         1
  1        2       1         2
  2        3       1         1
  2        2       1         1
  2        1       1         1
  3        1       1         1
  3        2       1         1

这可以在Oracle中实现吗?

1 个答案:

答案 0 :(得分:3)

您需要做的是枚举过道,以便识别奇数和偶数过道。函数dense_rank()执行此操作 - 并且order by子句允许它。

所以:

order by aisle,
         (case when mod(dense_rank() over (order by aisle), 2) = 1
               then rack else - rack
          end),
         level, position

实际上,如果aisle没有间隙,您也可以使用:

order by aisle,
         (case when mod(aisle, 2) = 1
               then rack else - rack
          end),
         level, position