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

Posted 理财

篇首语:夫君子之行,静以修身,俭以养德,非淡泊无以明志,非宁静无以致远。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 Oracle 中使用层次查询方便处理财务报表相关的知识,希望对你有一定的参考价值。

Oracle 中使用层次查询方便处理财务报表  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

  Oracle 中Connect By 子句对在关系表上表现层次关系提供了方便   使用Connect by 子句需要在表中定义两个字段 一个是父节点字段 一个是节点字段 其中节点字段一般来说是主键   例如我们作一张资产负债表  数据来源   资  产 期末余额 负债及所有者权益 期末余额  流动资产     流动负债    现金        短期存款     存放中央银行款项       财政性存款     存放同业款项       向中央银行借款    短期贷款      同业存放款项      其他流动资产       其他流动负债     长期资产    长期负债      中长期贷款      发行长期债券  减 贷款呆账准备       其他长期负债      固定资产净值     其他长期资产     无形 递延及其它资产      所有者权益     其中 实收资本     资产总计    负债及所有者权益合计       Create table balance_sheet (BS_ID INTEGER BS_PID INTEGER BS_NAME VARCHAR ( ) BS_VALUE NUMBER( ) );  BS_ID 项目代码 BS_PID 项目父代码 BS_Name 项目名称 BS_VALUE 数据列  插入测试数据  insert into balance_sheet values( 流动资产 );  insert into balance_sheet values( 现金 );  insert into balance_sheet values( 存放中央银行款项 );  insert into balance_sheet values( 存放同业款项 );  insert into balance_sheet values( 短期贷款 );  insert into balance_sheet values( 其他流动资产 );  insert into balance_sheet values( 长期资产 );  insert into balance_sheet values( 中长期贷款 );  insert into balance_sheet values( 减 贷款呆账准备 );  insert into balance_sheet values( 固定资产净值 );  insert into balance_sheet values( 其他长期资产 );  insert into balance_sheet values( 无形 递延及其它资产 );  insert into balance_sheet values( 资产总计 );  insert into balance_sheet values( 流动负债 );  insert into balance_sheet values( 短期存款 );  insert into balance_sheet values( 财政性存款 );  insert into balance_sheet values( 向中央银行借款 );  insert into balance_sheet values( 同业存放款项 );  insert into balance_sheet values( 其他流动负债 );  insert into balance_sheet values( 长期负债 );  insert into balance_sheet values( 发行长期债券 null);  insert into balance_sheet values( 其他长期负债 );  insert into balance_sheet values( 所有者权益 );  insert into balance_sheet values( 其中 实收资本 );  insert into balance_sheet values( 负债及所有者权益合计 );  mit;  显示全部数据   select bs_name bs_value from balance_sheet  connect by prior bs_id = bs_pid  start with bs_pid = –可以省略     显示一个节点的数据  select bs_name bs_value from balance_sheet  connect by prior bs_id = bs_pid  start with bs_pid =   其中connect by 定义父子连接关系  start with 定义开始节点 这个子句可以省略 表示自动将全部节点展开     (流动资产节点数据)    显示层次结构  select (case when level = then      ||bs_name  when level = then           ||bs_name  end ) bs_name   bs_value from balance_sheet  connect by prior bs_id = bs_pid  start with bs_pid =     其中引用了level字段 表示层次 它是每张表默认的字段 其他默认的字段还有rownum     (根据层次来实现缩进风格)   以下功能 i 及以上版本支持    层次内排序  select (case when level = then      ||bs_name  when level = then           ||bs_name  end ) bs_name   bs_value from balance_sheet  connect by prior bs_id = bs_pid  start with bs_id = or bs_id =   ORDER SIBLINGS BY bs_value desc      取遍历路径  select  ltrim(sys_connect_by_path( BS_Name | ) | ) path   (case when level = then      ||bs_name  when level = then           ||bs_name  end ) bs_name   bs_value  from balance_sheet  connect by prior bs_id = bs_pid  start with bs_pid =      层次计算  这里层次计算是指根据父子节点关系进行汇总 也就是说 父节点 = SUM(子节点)   但是在财务报表父指标 不一定是子指标的叠加 也可能是几个子指标减去另外几个子指标   例如   长期资产 = 中长期贷款 – 贷款呆账准备 +固定资产净值 +其他长期资产   为了实现这种情况 我们建一个字段BS_Dir来表示加减方向 表示 加 表示减  这样 父节点 = SUM(子节点 * Direction)  SELECT  SUBSTR (PATH INSTR (PATH | ) ) Par_path   sum(bs_value * bs_dir)  FROM  (SELECT BS_ID BS_PID   LTRIM (SYS_CONNECT_BY_PATH (bs_name | ) | ) PATH   bs_value bs_dir  FROM balance_sheet  CONNECT BY PRIOR bs_id = bs_pid  START WITH bs_pid = )  group by  SUBSTR (PATH INSTR (PATH | ) )    竟然有意外的收获 原表中的数据流动资产是错的!!!也许是我对业务知识了解不够 如果您知道原因 还清指点   数据的最后一行是对所有原表第一层节点的叠加 如果希望得到资产和负债的总计数据 需要对节点顺序进行重新调整 我的想法是建立一个表示汇总关系的逻辑的BS_LID 和  BS_LParID cha138/Article/program/Oracle/201311/18351

相关参考

知识大全 oracle树形结构实行查询

  ORACLE提供了一种树形结构用来实现层次查询  STARTWITH指定查询的根行  CONNECTBY指定父行和子行的关系  PRIOR引用父行  为测试方便使用如下Demo  建立数据库表Tr

知识大全 Oracle层次查询和with函数的使用示例

Oracle层次查询和with函数的使用示例  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  开发

知识大全 做销售的想做一个简单进出账销售额盈利及库存的简单报表、有什么合适的财务软体推荐下

做销售的想做一个简单进出账销售额盈利及库存的简单报表、有什么合适的财务软体推荐下?天商财运通喽。]核心功能:采购管理·多种方便灵活的进货方式,实现货物快速周转,减少库存积压·采购退货业务的处理,·对未

知识大全 oracle提高查询效率

  ()选择最有效率的表名顺序(只在基于规则的优化器中有效) ORACLE的解析器按照从右到左的顺序处理FROM子句中的表名FROM子句中写在最后的表(基础表drivingtable)将被最先处理在F

知识大全 财务报表中的三表,具体是哪三个报表

财务报表中的三表,具体是哪三个报表?知道的麻烦回答一下。谢了。一般企业对外报表的三个报表是:损益表、资产负债表、企业所得税报表(季度报表),企业内部的报表不含企业所得税表,而是现金流量表。谁知道财务报

“十三五”期间,为解决企业编制财务报告中的问题,全面规范财务报表列报,财政部先后修订印发了一系列财务报表格式,其中不包含( )。

会计改革与发展十四五规划题目:“十三五”期间,为解决企业编制财务报告中的问题,全面规范财务报表列报,财政部先后修订印发了一系列财务报表格式,其中不包含()。A、中小企业财务报表格式B、合并财务报表格式

知识大全 EXCEL账务处理系统(录入记账凭证自动成生财务报表和登记账薄且具备出具

求助用EXCEL做账的全套电子表格!EXCEL账务处理系统(录入记账凭证自动成生财务报表和登记账薄且具备出具  以下文字资料是由(全榜网网www.cha138.com)小

知识大全 如何从企业财务报表分析中发现问题

如何从企业财务报表分析中发现问题财务报表主要有资产负债表(反映企业一定日期所拥有的资产、需偿还的债务,以及投资者所拥有的净资产的情况);利润表(反映企业一定时期内的经营成果,及利润或亏损的情况,表明企

知识大全 怎样看企业财务报表

怎样看懂企业财务报表?怎么看懂财务报表:在企业众多的财务报表中,对外公布的报表主要是资产负债表、利润及利润分配表、财务状况变动表。这三张表有不同的作用。简单地说,资产负债表反映了某一时期企业报告日的财

知识大全 怎么看股票的财务报表

怎么看股票的财务报表?财务报表反映了过去的经营成果,一般要看的最主要的财务指标就是企业的盈利水平,主要指标有主营业务增长率(可以预计未来的市场份额)和净资产收益率在企业众多的财务报表中,对外公布的报表