业务场景:报表统计时需要根据某个用户组织架构中最上层的两级部门分组
方案一:扩展表结构数据静态化(现有数据结构要变更)
方案二:用递归查询出组织架构数据
最终解决方案:
--巧用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;
效果如下: