`

oracle的层次查询之 connect_by_root,sys_connect_by_path

阅读更多

项目中的需求是:点击一个机构,查询下级机构,并汇总下级机构的业务数据,形成如下界面。

例如:

==机构==      ==业务量==

+BB银行总行      1000

--华北区              200

   ---部门1           200

       ---客户经理1  100

       ---客户经理2  100

--华南区               600

  ---部门2            

       ---客户经理3  

       ---客户经理4

 

 

 

--区域1

       ---客户经理5

--区域2

 

各个机构下有客户经理,我们只有客户经理的业务数据,所有的机构都是通过客户经理来进行汇总业务量的。我们可以递归查到BB银行总行的所有的客户经理,这些客户经理需要分组汇总到各个子节点。

 

问题的难点  就在于如何得到客户经理究竟属于 哪个机构 是“华北区”还是“华南区”。

 

采用oracle的connect_by_root ,sys_connect_by_path(hier.child,'/')函数来找到这个机构的顶级root节点,那么我们就可以按照顶级节点进行汇总数据了。

以下sql是查询出**银行下的所有分行以及其属于哪个分行。

select level,connect_by_root parent,hier.child,parent,sys_connect_by_path(hier.child,'/')path 
from hier 
start with parent in
 (select child from hier where parent is null)
) 
connect by prior hier.child = parent; 

 

 附件:数据为网上转帖http://www.builder.com.cn/2005/0809/206241.shtml

,大致sql相同

 

 

 

 

create table hier
(
parent varchar2(30),
child varchar2(30)
);

insert into hier values(null,'Asia');
insert into hier values(null,'Australia');
insert into hier values(null,'Europe');
insert into hier values(null,'North America');
insert into hier values('Asia','China');
insert into hier values('Asia','Japan');
insert into hier values('Australia','New South Wales');
insert into hier values('New South Wales','Sydney');
insert into hier values('California','Redwood Shores');
insert into hier values('Canada','Ontario');
insert into hier values('China','Beijing');
insert into hier values('England','London');
insert into hier values('Europe','United Kingdom');
insert into hier values('Japan','Osaka');
insert into hier values('Japan','Tokyo');
insert into hier values('North America','Canada');
insert into hier values('North America','USA');
insert into hier values('Ontario','Ottawa');
insert into hier values('Ontario','Toronto');
insert into hier values('USA','California');
insert into hier values('United Kingdom','England'); 

 

 

 

 下面是部分查询结果:

 

1     Asia    China Asia /China
2    Asia    Beijing China /China/Beijing
1    Asia     Japan Asia /Japan
2    Asia    Osaka Japan /Japan/Osaka
2    Asia       Tokyo Japan /Japan/Tokyo
1    Australia    New South Wales Australia /New South Wales

0
0
分享到:
评论

相关推荐

    connect_by_path和connect_by_root比较总结

    通过实例比较了 SYS_CONNECT_BY_PATH 和 CONNECT_BY_ROOT 的异同,和返回树形的数据结构

    ORACLE查询树型关系(connect_by_prior_start_with)

    使用 START WITH 和 CONNECT BY 子句可以实现 SQL 的层次查询,并且可以使用 SYS_CONNECT_BY_PATH 函数和 CONNECT_BY_ROOT、CONNECT_BY_ISLEAF、CONNECT_BY_ISCYCLE 等伪列函数来增强层次查询的能力。

    【Oracle】树状结构查询

    SELECT LEVEL, CONNECT_BY_ROOT(a.job), SYS_CONNECT_BY_PATH(a.ename, '/'), a.* FROM empa WHERE a.empno <> 7369 START WITH a.empno = 7839 CONNECT BY PRIOR a.empno = a.mgr; ``` ### 检测叶子节点:`CONNECT...

    oracle-sql

    总的来说,Oracle SQL提供了丰富的层次查询和数据清理工具,如SYS_CONNECT_BY_PATH、CONNECT_BY_ISLEAF、CONNECT_BY_ROOT和CONNECT_BY_ISCYCLE等,使得在处理层次结构数据和大量数据清理时更为便捷高效。同时,理解...

    oracle-tree-sql.rar_oracle

    理解并熟练掌握`CONNECT BY`、`PRIOR`、`sys_connect_by_path`等关键字和函数,可以帮助我们更高效地处理树形结构的数据。在实际应用中,还需要考虑性能优化,如合理设计表结构和使用索引,以确保查询的效率。

    解决Oracle没有WM_CONCAT函数.zip

    SELECT REGEXP_REPLACE(SYS_CONNECT_BY_PATH(column, ','), '^,', '') AS aggregated_column FROM (SELECT column, CONNECT_BY_ROOT rowid as rid FROM table) START WITH rid = (SELECT MIN(rowid) FROM table) ...

    Oracle树查询总结

    使用 `SYS_CONNECT_BY_PATH` 函数可以生成从根节点到指定节点的完整路径,每个节点间用指定字符(这里是 `/`)分隔。 8. **列出当前节点的根节点** `CONNECT_BY_ROOT` 函数用于标识根节点,结合 `START WITH ...

    Oracle常用操作(项目中积累的经验)

    这些关键词用于构建树状结构,其中`LEVEL`表示层次,`CONNECT_BY_ISLEAF`标识叶子节点,`SYS_CONNECT_BY_PATH`生成路径,`START WITH`指定起始节点,`CONNECT BY PRIOR`定义层级关系,`CONNECT_BY_ROOT`查找根节点,...

    Oracle 数据库特殊查询总结

    1. 查询本节点及本节点以下的所有节点: ...SELECT RPAD( ' ', 2*(LEVEL-1), '-' ) || DEPNAME "DEPNAME",CONNECT_BY_ROOT DEPNAME "ROOT",CONNECT_BY_ISLEAF "ISLEAF",LEVEL ,SYS_CONNECT_BY_PATH(DEPNAM

    Oracle树查询及相关函数

    除了基本的查询语法,Oracle还提供了一些辅助函数来处理树结构,如`SYS_CONNECT_BY_PATH`可以返回节点在整个树路径中的位置,`LEVEL`返回节点在树中的深度,`CONNECT_BY_ROOT`则用于获取树的根节点。 在进行树查询...

    oracle高级语句

    SYS_CONNECT_BY_PATH(ename, '/') AS path FROM scott.emp START WITH mgr IS NULL CONNECT BY PRIOR empno = mgr; ``` **树状结构遍历规则:** 1. 从根节点开始。 2. 访问该节点。 3. 判断该节点是否有未被访问的...

    ORACLE 合辑

    - 生成路径字符串,如:`SELECT SYS_CONNECT_BY_PATH(id, '/') FROM table`. #### 闪回 **闪回查询:** - 允许用户查看过去某个时间点的数据状态。 - 示例:`SELECT * FROM table AS OF TIMESTAMP 'YYYY-MM-DD HH...

    Oracle 常用命令完整版

    以`root`用户切换到`oracle`用户,然后进入SQL*Plus环境,使用`sqlplus /nolog`。要以管理员身份登录,执行`sqlplus / as sysdba`,接着输入`startup`启动数据库,`shutdown immediate`则可立即停止数据库。若要远程...

    Oracle学习资料2

    - `HKEY_CLASSES_ROOT`下的Oracle相关类 - `HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\MenuOrder\StartMenu\Programs`下的Oracle程序项。 4. **环境变量调整**:更新系统环境变量`...

    Oracle+11g+在Linux平台上的安装视频教程

    2. **设置环境变量**:配置如`ORACLE_HOME`、`PATH`、`LD_LIBRARY_PATH`等环境变量,这些变量将指导系统找到Oracle软件和所需的库。 3. **下载和解压Oracle软件**:从Oracle官方网站获取适用于Linux的Oracle 11g...

    Oracle SQL高级编程(资深Oracle专家力作,OakTable团队推荐)--随书源代码

    10.4.2 SYS_CONNECT_BY_PATH函数 279 10.4.3 CONNECT_BY_ROOT运算符 281 10.4.4 CONNECT_BY_ISCYCLE伪列和NOCYCLE参数 284 10.4.5 CONNECT_BY_ISLEAF伪列 287 10.5 小结 291 第11章 半联结和反联结 292 11.1 ...

Global site tag (gtag.js) - Google Analytics