ORACLE 树形查询(connect by...start with...)的应用(一)

关于oracle的树形查询(connect by...start with...)

转录1

org是部门表,其中orgid是当前部门id,porgid是上级目录id,像这种有父子关系的表中做从某一部门向上或向下的查询用到了oracleconnect by语句:

select * from org connect by prior orgid=porgid start with orgid=1
//
从部门id1的部门寻找所有子部门
select * from org connect by prior porgid=orgid start with orgid=1
//
从部门id1的部门寻找所有父部门

转录2

Oracle 中使用层次查询方便处理财务报表

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/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值