繁体   English   中英

基于先前ID字段的Oracle自定义订单

[英]Oracle custom order based on previous id field

我有一个具有先前ID的表,并希望基于id_prev对输出进行排序。 空值必须是第一个值。

示例图片

id | id_prev | data
------------------
1  | 2       | foo
2  | 4       | foo
3  | 1       | foobar
4  | null    | fooo
10 | 3       | fo
8  | 10      | fo

结果

id | id_prev | sort | data
------------------
4  | null    | 1    | fooo
2  | 4       | 2    | foo
1  | 2       | 3    | foo
3  | 1       | 4    | foobar
10 | 3       | 5    | fo
8  | 10      | 6    | fo

尝试这个:

select * from (
    select
      t.id,
      t.id_prev,
      t.data,
      row_number() over(order by t.id_prev DESC NULLS FIRST) AS sort
    from
      {your_table} t
) t order by t.sort; 

事先连接

select id,id_prev,level,data 
from TABLE_NAME
start with id_prev is null
connect by prior  id=id_prev
order by level;

试试这个Order by

Order by case when id_prev is null then 1 else 0 end desc,id_prev desc

如果要在结果中对列进行排序,则

Row_number()
     Over(Order by case when id_prev is null then 1 else 0 end desc,id_prev desc) as Sort

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM