【oracle】想要得到一个与输入顺序相同的结果

【oracle】想要得到一个与输入顺序相同的结果

在Oracle中,输出结果顺序好像是个rowid相同的,也就是经常使用的rownum序列的值,所以可以通过对rownum进行order by来让输出结果和原来一样

举个例子,下面的sql执行一下

with main as(
    select rownum seq ,c.*
    from CoffeeShop c
)

select t.id,t.drink from(
    select a.id,b.drink,rank() over(partition by a.id order by b.seq desc) as tt
     from main a,main b where a.seq >= b.seq(+) 
     and b.drink is not null
     ) t
WHERE tt = 1

结果出来是这样的,因为其中使用了窗口函数,其中含有order by,所以出来的顺序和最初输入的顺序不一样
image

那么可以使用对rownum进行order by,也就是sql中的这个seq

with main as(
    select rownum seq ,c.*
    from CoffeeShop c
)

select t.id,t.drink from(
    select a.id,b.drink,rank() over(partition by a.id order by b.seq desc) as tt
     from main a,main b where a.seq >= b.seq(+) 
     and b.drink is not null
     order by a.seq--多了这个,对原来的虚列进行排序
     ) t
WHERE tt = 1

结果就是这样的
image

posted @ 2023-03-01 21:39  DbWong_0918  阅读(106)  评论(0编辑  收藏  举报