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
我希望编写一个可以使用以下方法对记录进行排序的查询
- 第一个走道(升序)
- 然后通过货架(上升到一个过道和
下降到下一个等等。 . . 这是我做不到的部分
好像想知道在Oracle中能不能实现)
- 然后按级别(升序)
- 然后按位置(升序)
因此生成的有序行如下
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
我有一个 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
我希望编写一个可以使用以下方法对记录进行排序的查询
- 第一个走道(升序)
- 然后通过货架(上升到一个过道和 下降到下一个等等。 . . 这是我做不到的部分 好像想知道在Oracle中能不能实现)
- 然后按级别(升序)
- 然后按位置(升序)
因此生成的有序行如下
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