oracle树结构统计,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;

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值