ORACLE 递归树型结构统计汇总

区域平台统计报表,省--市--区 汇总,还有各级医院,汇总与列表要在一个列表显示。

用到ORACLE 会话时临时表  GLOBAL TEMPORARY TABLE     ON COMMIT PRESERVE ROWS;

递归树: START WITH P.PARENTORG = ‘ROOT‘ 
              CONNECT BY PRIOR P.ORGCODE = P.PARENTORG;

WITH 连续嵌套

记录一下便于查阅。

CREATE OR REPLACE PACKAGE BODY PKG_JXKH_SHXBB AS

PROCEDURE MJZGH(P_REPORTID IN VARCHAR2,
P_UNITID IN VARCHAR2, --要查询的行政区划
P_SDATE IN VARCHAR2, --要查询的开始日期
P_EDATE IN VARCHAR2, --要查询的开始日期
V_CUR OUT REFCURSORTYPE) IS
PRAGMA AUTONOMOUS_TRANSACTION;
P_SQL VARCHAR2(4000);
BEGIN
P_SQL := ‘CREATE GLOBAL TEMPORARY TABLE TMP_MZJZGH (
PARENTCODE VARCHAR2(60),
PARENTUNITID VARCHAR2(60),
PARENTUNITNAME VARCHAR2(60),
A NUMBER,
B NUMBER,
C NUMBER
) ON COMMIT PRESERVE ROWS‘;
--EXECUTE IMMEDIATE P_SQL;
EXECUTE IMMEDIATE ‘TRUNCATE TABLE TMP_MZJZGH‘;
COMMIT;

INSERT INTO TMP_MZJZGH
(PARENTCODE, PARENTUNITID, PARENTUNITNAME)
SELECT P.PARENTORG, P.ORGCODE, P.MANAGERORGNAME
FROM PMR005_ORG P
WHERE P.BELONGTO < 3
AND P.STATUS = ‘1‘
START WITH P.PARENTORG = ‘ROOT‘
CONNECT BY PRIOR P.ORGCODE = P.PARENTORG;

FOR CUR IN (
WITH TMP AS (SELECT A.PARENTORG,
A.ORGCODE,
A.MANAGERORGNAME,
TT.*
FROM PMR005_ORG A,
(SELECT T.UNITID,
SUM(CASE
WHEN T.METADATAID = ‘MZ_JZXX_GHRC‘ THEN
T.METADATAVALUE
ELSE
0
END) SUMGHRC,
SUM(CASE
WHEN T.METADATAID = ‘MZ_FY_JZRC‘ THEN
T.METADATAVALUE
ELSE
0
END) SUMJZRC,
SUM(CASE
WHEN T.METADATAID = ‘MZ_JZXX_LGRC‘ THEN
T.METADATAVALUE
ELSE
0
END) SUMLGRC
FROM JXKH_METADTAVALUE T
WHERE T.METADATAID IN
(‘MZ_JZXX_GHRC‘, ‘MZ_FY_JZRC‘,
‘MZ_JZXX_LGRC‘)
AND INSTR(P_UNITID, UNITID) > 0
AND T.STATDATE >
TO_DATE(P_SDATE, ‘YYYY-MM-DD‘)
AND T.STATDATE <
TO_DATE(P_EDATE, ‘YYYY-MM-DD‘)
GROUP BY T.UNITID) TT
WHERE A.ORGCODE = TT.UNITID
AND A.BELONGTO < 4),
TMP2 AS (SELECT P2.PARENTORG,
P2.ORGCODE,
P2.MANAGERORGNAME,
SUM(SUMGHRC) A,
SUM(SUMJZRC) B,
SUM(SUMLGRC) C
FROM PMR005_ORG P2, TMP
WHERE P2.PARENTORG =
(SELECT ORGCODE
FROM PMR005_ORG
WHERE PARENTORG =
‘ROOT‘)
AND (P2.ORGCODE =
TMP.ORGCODE AND
P2.ORGTYPE = ‘2‘)
GROUP BY P2.PARENTORG,
P2.ORGCODE,
P2.MANAGERORGNAME
UNION
SELECT P3.PARENTORG,
P3.ORGCODE,
P3.MANAGERORGNAME,
SUM(SUMGHRC),
SUM(SUMJZRC),
SUM(SUMLGRC)
FROM TMP, PMR005_ORG P3
WHERE (P3.ORGCODE =
TMP.PARENTORG OR
P3.ORGCODE =
TMP.ORGCODE)
AND P3.BELONGTO = ‘2‘
GROUP BY P3.PARENTORG,
P3.ORGCODE,
P3.MANAGERORGNAME),
TMP3 AS (SELECT PARENTORG,
ORGCODE,
MANAGERORGNAME,
A,
B,
C
FROM TMP2
UNION
SELECT ‘ROOT‘,
‘14000000‘,
‘山西省‘,
SUM(A),
SUM(B),
SUM(C)
FROM TMP2
GROUP BY ‘ROOT‘,
‘14000000‘,
‘山西省‘
UNION
SELECT P4.PARENTORG,
P4.ORGCODE,
P4.SHORTNAME,
SUM(TP.A),
SUM(TP.B),
SUM(TP.C)
FROM TMP2 TP,
PMR005_ORG P4
WHERE TP.PARENTORG =
P4.ORGCODE
AND P4.PARENTORG =
(SELECT ORGCODE
FROM PMR005_ORG
WHERE PARENTORG =
‘ROOT‘
AND ORGTYPE = ‘1‘)
GROUP BY P4.PARENTORG,
P4.ORGCODE,
P4.SHORTNAME)
SELECT * FROM TMP3)
LOOP
UPDATE TMP_MZJZGH
SET A = CUR.A, B = CUR.B, C = CUR.C
WHERE PARENTCODE = CUR.PARENTORG
AND PARENTUNITID = CUR.ORGCODE
AND PARENTUNITNAME = CUR.MANAGERORGNAME;
END LOOP;
COMMIT;

OPEN V_CUR FOR
SELECT A.PARENTCODE,
A.PARENTUNITID,
A.PARENTUNITNAME,
A.A MZ_JZXX_GHRC,
A.B MZ_FY_JZRC,
A.C MZ_JZXX_LGRC
FROM TMP_MZJZGH A;

END;

END;

原文地址:https://www.cnblogs.com/zhouhy6/p/10551121.html

时间: 2024-07-29 18:32:01

ORACLE 递归树型结构统计汇总的相关文章

web api+递归树型结构

using System; using System.Collections.Generic; using System.Linq; using System.Net; using System.Net.Http; using System.Web.Http; using SqlSugar; using Models; using WebApplication.Dao; using System.Text; namespace WebApplication.Controllers { /// <

oracle查找树型结构数据

记录一个oracle中查找树型结构数据的语句: select * from tablewhere XXX start with org_id = 'xx' connect by prior org_id = parent_id; 1.CONNECT BY子句说明每行数据将是按层次顺序检索,并规定将表中的数据连入树型结构的关系中.PRIORY运算符必须放置在连接关系的两列中某一个的前面.对于节 点间的父子关系,PRIOR运算符在一侧表示父节点,在另一侧表示子节点,从而确定查找树结构是的顺序是自顶向

通用的树型类,可以生成任何树型结构

<?php namespace Vendor\Tree; /** * 通用的树型类,可以生成任何树型结构 */ class Tree { /** * 生成树型结构所需要的2维数组 * @var array */ public $arr = array(); /** * 生成树型结构所需修饰符号,可以换成图片 * @var array */ public $icon = array('│', '├', '└'); public $nbsp = " "; private $str =

Mysql树型结构2种方式及相互转换

Mysql实现树型结构,数据库上常见有2种方式:领接表.预排序遍历树(MPTT). 领接表方式-- 主要依赖于一个 parent 字段,用于指向上级节点,将相邻的上下级节点连接起来,id 为自动递增自动,parent_id 为上级节点的 id. 领接表方式的优点在于容易理解,代码也比较简单明了.缺点则是递归中的 SQL 查询会导致负载变大,特别是需要处理比较大型的树状结构的时候,查询语句会随着层级的增加而增加,WEB 应用的瓶颈基本都在数据库方面,所以这是一个比较致命的缺点,直接导致树结构的扩展

树型结构

树型结构的基本概念 对大量的输入数据,链表的线性访问时间太慢,不宜使用.本文探讨另外一种重要的数据结构----树,其大部分时间可以保证操作的运行平均时间复杂度为O(logN),第一部分先来看一下树的一些预备知识. 首先看一下树形结构的样子,下图代表的是树型结构的一般形态: 由上图看得出树是一些节点的集合,总结一下树的一些基本概念: 1.结点:树中的数据元素都称之为结点 2.根:最上面的结点称之为根,一颗树只有一个根且由根发展而来,从另外一个角度来说,每个结点都可以认为是其子树的根 3.父亲:结点

dzzoffice的树型结构用户管理设计

在DzzOffice1.1的开发中,针对用户使用群体重新设计了,机构.部门.用户管理应用. 传统OA,企业相关程序,一般是设置机构-设置部门-设置职位-添加用户这样的步骤.每个步骤分为不同的管理界面.用户管理采用列表的形式,每页显示10条.20条或更多.用户的管理,移动等操作会在不同的界面中切换.感觉操作过程会很繁琐,显示也不直观. DzzOffice主要针对几人至几百人的中小型团队和企业使用设计,要实现的功能目标主要是: 便捷增 删 移 机构.部门.子部门 便捷增 删 移 用户 批量导入用户

数据结构中常用树型结构简介

B树.B-树.B+树.B*树.红黑树rbtree 二叉排序树.trie树Double Array 字典查找树 B树 即二叉搜索树: 1.所有非叶子结点至多拥有两个儿子(Left和Right): 2.所有结点存储一个关键字: 3.非叶子结点的左指针指向小于其关键字的子树,右指针指向大于其关键字的子树: 如: B树的搜索,从根结点开始,如果查询的关键字与结点的关键字相等,那么就命中:否则,如果查询关键字比结点关键字小,就进入左儿子:如果比结点关键字大,就进入右儿子:如果左儿子或右儿子的指针为空,则报

在Silverlight中使用HierarchicalDataTemplate为TreeView实现递归树状结构

将实体绑定到TreeView控件,实现树状结构的显示,如下图所示.这个功能通过HierarchicalDataTemplate实现. ? 1. 业务实体 作为举例,我定义了一个大家都很熟悉的Folder类型,即文件夹.我们都知道,文件夹又可以包含子文件夹,而且可以多层嵌套.所以,这是一个递归的结构体. public class Folder { public string Name { get; set; } public ObservableCollection<Folder> Folder

ElementUI的表格树(树型结构表格),很简单方式,el-table只需要小小改动几个地方

效果: 在el-table中,支持树类型的数据的显示.当 row 中包含 children 字段时,被视为树形数据.渲染树形数据时,必须要指定 row-key.支持子节点数据异步加载. 设置 Table 的 lazy 属性为 true 与加载函数 load .通过指定 row 中的 hasChildren 字段来指定哪些行是包含子节点.children 与 hasChildren 都可以通过 tree-props 配置. default-expand-all属性表示默认展开,不需要展开可以删除.