项目中的需求是:点击一个机构,查询下级机构,并汇总下级机构的业务数据,形成如下界面。
例如:
==机构== ==业务量==
+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
分享到:
相关推荐
通过实例比较了 SYS_CONNECT_BY_PATH 和 CONNECT_BY_ROOT 的异同,和返回树形的数据结构
使用 START WITH 和 CONNECT BY 子句可以实现 SQL 的层次查询,并且可以使用 SYS_CONNECT_BY_PATH 函数和 CONNECT_BY_ROOT、CONNECT_BY_ISLEAF、CONNECT_BY_ISCYCLE 等伪列函数来增强层次查询的能力。
行列转换,层级关系,oracle sys_connect_by_path的用法
今天无意间,看connect by的使用,看到了sys_connect_by_path的用法,算是给我一个另类的惊喜了,sys_connect_by_path(columnname, seperator) 也可以拼出串来,不过这个函数本身不是用来给我们做这个结果集连接用...
oracle中的数查询,介绍的详细,有例子。
Oracle 连接查询是指使用 START WITH 和 CONNECT BY 语句来实现递归查询的方法,这种方法可以生成树形结构的数据。在 Oracle 中,START WITH 语句用于指定递归查询的开始记录,而 CONNECT BY 语句用于指定递归查询的...
Oracle_SSN_DLM_08030814.exe
Oracle_VM_VirtualBox_Extension_Pack-5.2.22,用于VirtualBox外接移动设备识别
在Delphi中用odac控件连接oracle数据库。不用安装oracle客户端。
Oracle_VM_VirtualBox_Extension_Pack-5.0.2-102096扩展包
oracle_葵花宝典oracle_葵花宝典oracle_葵花宝典oracle_葵花宝典oracle_葵花宝典oracle_葵花宝典oracle_葵花宝典oracle_葵花宝典oracle_葵花宝典oracle_葵花宝典oracle_葵花宝典oracle_葵花宝典
在安装VirtualBox时候的VirtualBox Extension Pack文件: Oracle_VM_VirtualBox_Extension_Pack-6.1.4.vbox-extpack
path变量后边增加 C:\Oracle_instant_client_10_2; 2、在oracle安装路径(C:\oracle\product\10.2.0\db_1\network\ADMIN)中找tnsnames.ora 复制到C:\Oracle_instant_client_10_2路径下 3、第一次启动plsql,点击取消...
Oracle_VM_VirtualBox_Extension_Pack-5.2.12搭建虚拟主机平台。
Oracle_VM_VirtualBox_Extension_Pack-4.2.16扩展包 支持所用多平台
Oracle_VM_VirtualBox_Extension_Pack-4.2.16-86992.vbox-extpack 作为Oracle_VM_VirtualBox的扩展补丁
Oracle_VM_VirtualBox_Extension_Pack-6.1.0.vbox-extpack,virtualbox虚拟机扩展包
在Jupyter连接Oracle数据库所需要的文件,请根据python版本选择。
Oracle_VM_VirtualBox_Extension_Pack-5.0.14-105127.vbox-extpack