关于oracle的树形查询(connect by...start with...)
转录1:
org是部门表,其中orgid是当前部门id,porgid是上级目录id,像这种有父子关系的表中做从某一部门向上或向下的查询用到了oracle的connect by语句:
select * from org connect by prior orgid=porgid start with orgid=1
//从部门id为1的部门寻找所有子部门
select * from org connect by prior porgid=orgid start with orgid=1
//从部门id为1的部门寻找所有父部门
转录2:
Oracle 中使用层次查询方便处理财务报表
摘要:本文介绍了如何使用Oracle 中的Connect by 子句,并结合一个实例,完成了对一张资产负债表的计算。
Oracle 中Connect By 子句对在关系表上表现层次关系提供了方便。
使用Connect by 子句需要在表中定义两个字段,一个是父节点字段,一个是节点字段。其中节点字段一般来说是主键。
[@more@]例如我们作一张资产负债表
数据来源:http://www.adbc.com.cn/XXLR1.ASP?ID=5211
资 产 | 期末余额 | 负债及所有者权益 | 期末余额 |
流动资产 | 4256.45 | 流动负债 | 7453.74 |
现金 | 2.00 | 短期存款 | 305.54 |
存放中央银行款项 | 160.77 | 财政性存款 | 411.80 |
存放同业款项 | 18.34 | 向中央银行借款 | 6485.05 |
短期贷款 | 4103.41 | 同业存放款项 | 2.15 |
其他流动资产 | 71.93 | 其他流动负债 | 249.20 |
长期资产 | 3287.75 | 长期负债 | 0.07 |
中长期贷款 | 3262.89 | 发行长期债券 |
|
减:贷款呆账准备 | 73.71 | 其他长期负债 | 0.07 |
固定资产净值 | 77.58 |
|
|
其他长期资产 | 20.99 |
|
|
无形、递延及其它资产 | 0.52 | 所有者权益 | 190.91 |
|
| 其中:实收资本 | 165.15 |
资产总计 | 7644.72 | 负债及所有者权益合计 | 7644.72 |
Create table balance_sheet (BS_ID INTEGER ,BS_PID INTEGER ,BS_NAME VARCHAR2(100) ,BS_VALUE NUMBER(10) );
BS_ID 项目代码 BS_PID 项目父代码 BS_Name 项目名称 BS_VALUE 数据列
插入测试数据
insert into balance_sheet values(1,0,'流动资产',4256.45);
insert into balance_sheet values(2,1,'现金',2.00);
insert into balance_sheet values(3,1,'存放中央银行款项',160.77);
insert into balance_sheet values(4,1,'存放同业款项',18.34);
insert into balance_sheet values(5,1,'短期贷款', 4103.41);
insert into balance_sheet values(6,1,'其他流动资产',71.93);
insert into balance_sheet values(7,0,'长期资产',3287.75);
insert into balance_sheet values(8,7,'中长期贷款', 3262.89);
insert into balance_sheet values(9,7,'减:贷款呆账准备',73.71);
insert into balance_sheet values(10,7,'固定资产净值',77.58);
insert into balance_sheet values(11,7,'其他长期资产',20.99);
insert into balance_sheet values(12,0,'无形、递延及其它资产',0.52);
insert into balance_sheet values(13,0,'资产总计',7644.72);
insert into balance_sheet values(14,0,'流动负债',7453.74);
insert into balance_sheet values(15,14,'短期存款',305.54);
insert into balance_sheet values(16,14,'财政性存款',411.80);
insert into balance_sheet values(17,14,'向中央银行借款',6485.05);
insert into balance_sheet values(18,14,'同业存放款项',2.15);
insert into balance_sheet values(19,14,'其他流动负债',249.20);
insert into balance_sheet values(20,0,'长期负债',0.07);
insert into balance_sheet values(21,20,'发行长期债券',null);
insert into balance_sheet values(22,20,'其他长期负债', 0.07);
insert into balance_sheet values(23,0,'所有者权益',190.91);
insert into balance_sheet values(24,23,'其中:实收资本',165.15);
insert into balance_sheet values(25,0,'负债及所有者权益合计',7644.72);
commit;
显示全部数据:
select bs_name,bs_value from balance_sheet
connect by prior bs_id = bs_pid
start with bs_pid = 0
流动资产 | 4256.45 |
现金 | 2 |
存放中央银行款项 | 160.77 |
存放同业款项 | 18.34 |
短期贷款 | 4103.41 |
其他流动资产 | 71.93 |
长期资产 | 3287.75 |
中长期贷款 | 3262.89 |
减:贷款呆账准备 | 73.71 |
固定资产净值 | 77.58 |
其他长期资产 | 20.99 |
无形、递延及其它资产 | 0.52 |
资产总计 | 7644.72 |
流动负债 | 7453.74 |
短期存款 | 305.54 |
财政性存款 | 411.8 |
向中央银行借款 | 6485.05 |
同业存放款项 | 2.15 |
其他流动负债 | 249.2 |
长期负债 | 0.07 |
发行长期债券 | |
其他长期负债 | 0.07 |
所有者权益 | 190.91 |
其中:实收资本 | 165.15 |
负债及所有者权益合计 | 7644.72 |
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/8109090/viewspace-880850/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/8109090/viewspace-880850/