oracle order column by adjacent values 从中位数开始并在任一侧向外添加
oracle order column by adjacent values starting from median and adding outward on either side
很难想出一个合适的标题,所以希望这个描述和下面的例子能让它更清楚。
我有一个 table,其中有一个 non-null 列(但不是主键),其值是一个存储为字符串的五位数,例如“00001”、“00002”、“ 00003', ..., '99999'。并非所有数字都存在(序列可能缺少一个数字)。我正在尝试进行查询,如果给出数字的前两位数,我可以根据从中间值开始向外工作的相邻数字对 select 语句进行排序。
这是我需要的示例 (sql fiddle here),但不幸的是我无法使用案例语句来排序结果,因为案例未知时间,可能会有很多。
select number_str_id from my_table
where number_str_id like '00%'
order by
case to_number(number_str_id)
when 1 then 9
when 2 then 7
when 3 then 5
when 4 then 3
when 5 then 1
when 6 then 2
when 7 then 4
when 8 then 6
when 9 then 8
end
asc;
非常感谢任何建议。谢谢!
(期待评论。)
这个方向对吗?
order by
case to_number(substr(number_str_id, 3, 1))
when 1 then 9
when 2 then 7
when 3 then 5
when 4 then 3
when 5 then 1
when 6 then 2
when 7 then 4
when 8 then 6
when 9 then 8
end,
case to_number(substr(number_str_id, 4, 1))
when 1 then 9
when 2 then 7
when 3 then 5
when 4 then 3
when 5 then 1
when 6 then 2
when 7 then 4
when 8 then 6
when 9 then 8
end,
case to_number(substr(number_str_id, 5, 1))
when 1 then 9
when 2 then 7
when 3 then 5
when 4 then 3
when 5 then 1
when 6 then 2
when 7 then 4
when 8 then 6
when 9 then 8
end
我不确定我是否理解你这里的逻辑。
很难想出一个合适的标题,所以希望这个描述和下面的例子能让它更清楚。
我有一个 table,其中有一个 non-null 列(但不是主键),其值是一个存储为字符串的五位数,例如“00001”、“00002”、“ 00003', ..., '99999'。并非所有数字都存在(序列可能缺少一个数字)。我正在尝试进行查询,如果给出数字的前两位数,我可以根据从中间值开始向外工作的相邻数字对 select 语句进行排序。
这是我需要的示例 (sql fiddle here),但不幸的是我无法使用案例语句来排序结果,因为案例未知时间,可能会有很多。
select number_str_id from my_table
where number_str_id like '00%'
order by
case to_number(number_str_id)
when 1 then 9
when 2 then 7
when 3 then 5
when 4 then 3
when 5 then 1
when 6 then 2
when 7 then 4
when 8 then 6
when 9 then 8
end
asc;
非常感谢任何建议。谢谢!
(期待评论。)
这个方向对吗?
order by
case to_number(substr(number_str_id, 3, 1))
when 1 then 9
when 2 then 7
when 3 then 5
when 4 then 3
when 5 then 1
when 6 then 2
when 7 then 4
when 8 then 6
when 9 then 8
end,
case to_number(substr(number_str_id, 4, 1))
when 1 then 9
when 2 then 7
when 3 then 5
when 4 then 3
when 5 then 1
when 6 then 2
when 7 then 4
when 8 then 6
when 9 then 8
end,
case to_number(substr(number_str_id, 5, 1))
when 1 then 9
when 2 then 7
when 3 then 5
when 4 then 3
when 5 then 1
when 6 then 2
when 7 then 4
when 8 then 6
when 9 then 8
end
我不确定我是否理解你这里的逻辑。