Oracle 递归、目录树查询(SYS_CONNECT_BY_PATH)

本文介绍了一种在报表统计中对用户组织架构进行高效分组的方法,利用SQL的CONNECT_BY_ROOT与SYS_CONNECT_BY_PATH函数,实现从根节点开始递归查询所有子部门,巧妙地获取最上层的两级部门信息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

业务场景:报表统计时需要根据某个用户组织架构中最上层的两级部门分组
方案一:扩展表结构数据静态化(现有数据结构要变更)
方案二:用递归查询出组织架构数据

最终解决方案:

--巧用CONNECT_BY_ROOT与start with ...  connect by prior ...
 select level ln,
          organ_id,
          parent_id,
          lpad(' ', 2*(level - 1)) || organ_name tree_path,
          SYS_CONNECT_BY_PATH(organ_name, '@') full_path,
          CONNECT_BY_ROOT(organ_name) dept1,        
          replace(SYS_CONNECT_BY_PATH(case when level=2 then organ_name else '' end , '@@'),'@@','') dept2,
          replace( SYS_CONNECT_BY_PATH(case when level=3 then organ_name else '' end , '@@'),'@@','') dept3, 
          replace( SYS_CONNECT_BY_PATH(case when level=4 then organ_name else '' end , '@@'),'@@','') dept4           
    from t_organ     
    start with parent_id ='rootId' 
    connect by prior organ_id = parent_id;

效果如下:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值