我有一个包含以下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中实现吗?
答案 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