[英]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.