SQL排序问题 已知的规则是下一条数据的A列是等于上一条数据的B列的

oracle怎么将这俩列数据连续起来,已知的规则就是下一条数据的A列等于上一条数据的B列,动态数据,排除case when,也不要自己串自己,太多行了。图中467后就断了,跳到倒数第二行了

就是怎么把图中红框的俩行数据放到蓝色背景下面一行,但是因为是动态数据,没反法用case when

image.png

吾姓独孤 发布于 2022-8-23 08:36 (编辑于 2022-8-23 13:33)
1min目标场景问卷 立即参与
回答问题
悬赏:0 F币 + 添加悬赏
提示:增加悬赏、完善问题、追问等操作,可使您的问题被置顶,并向所有关注者发送通知
共3回答
最佳回答
0
吾姓独孤Lv6高级互助
发布于2022-12-8 08:44

oracle 有相关语法可以使用递归去查询

select * from 表 start with 条件入口 connect by prior id =  parent_id(向下)

select * from 表 start with 条件入口 connect by prior parent_id = id(向上)

如果不写prior,表明前序遍历 未指明遍历方向,所以不进行递归,习惯上会在语句后面加上order by排序和group by分组

      connect_by_root(列名)  查询根节点

      connect_by_isleaf   查询是否叶子节点,0是,1不是

      sys_connect_by_path  查询递归路径

最佳回答
0
lxy2Lv6中级互助
发布于2022-8-23 08:47
  • 吾姓独孤 吾姓独孤(提问者) 具体怎么写呢,我看了这个文档好像只能获取上一笔下一笔数据
    2022-08-23 08:53 
  • lxy2 lxy2 回复 吾姓独孤(提问者) select *, lead(a,1)over(order by b) as 新值 from ( select 1 as a,\'a\' as b union all select 2 as a ,\'b\' union all select 3 as a ,\'c\' ) a1类似这样,是你要的嘛?
    2022-08-23 09:01 
  • 吾姓独孤 吾姓独孤(提问者) 回复 lxy2 不是哦,这个是取下一个值,但是需求数据是跳行了, 1234567 变成 1452367
    2022-08-23 09:07 
  • lxy2 lxy2 回复 吾姓独孤(提问者) 噢,没太明白
    2022-08-23 09:11 
  • 吾姓独孤 吾姓独孤(提问者) 回复 lxy2 你看那个问题里的图片,你可以模拟下数据,试试用lead或者lag函数,我试过不行的好像,只能取上下一个值,没啥用
    2022-08-23 09:13 
最佳回答
0
jy804909Lv4见习互助
发布于2022-8-23 08:58

sqlserver 可以试试lag窗口函数,oracle不知道

帆软有个层次坐标 貌似也可以,把b列用层次坐标向下移一位

  • 吾姓独孤 吾姓独孤(提问者) ORACLE也有这个函数,但是问题下移一位他还是错的,他不是错位一个,是跳位了,比如123456789 现在是128934567
    2022-08-23 09:03 
  • 2关注人数
  • 2428浏览人数
  • 最后回答于:2022-12-8 08:44
    请选择关闭问题的原因
    确定 取消
    返回顶部