Oracle Order by - 基于函数

Oracle Order by - Function Based

我有一个 table,其中包含以下 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 | 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 中可以实现吗?

你需要做的是枚举过道,这样你就可以识别出奇数和偶数。函数 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