我有一个表,其中包含以下 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
我们制定了以下 Order by Clause
order by aisle,
(case when mod(dense_rank() over (order by aisle), 2) = 1 then rack else - rack
end),
level,
position
但是,当我执行查询时,我收到错误“ORA-00932:不一致的数据类型:预期的 CHAR 为 NUMBER”。这些列都是 VARCHAR2 类型。
我该怎么做才能让它发挥作用?
最佳答案
如果列是 varchar2()
,那么一元减法就不会那么有效。
这个怎么样?
order by aisle,
(case when mod(dense_rank() over (order by aisle), 2) = 1 then rack end) asc,
(case when mod(dense_rank() over (order by aisle), 2) = 0 then rack end) desc,
level,
position
关于sql - Oracle 排序依据 - 基于函数 (dense_rank),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39337780/