ORACLE 查询上级下级间关系

WITH TMP AS
       (SELECT TMP.ORG_NUM AS INST_ID,
               TMP.UP_ORG_NUM AS PARENT_INST_ID,
               LTRIM(SYS_CONNECT_BY_PATH(TMP.ORG_NUM, ','), ',') AS CODE_PATH
        FROM (SELECT A.ORG_NUM,
                     CASE WHEN A.ORG_TYP = '0' THEN NULL ELSE A.UP_ORG_NUM END AS UP_ORG_NUM,
                     A.ORG_TYP
                FROM TESTNOW A
               WHERE A.DATA_DATE = 20180430) TMP
        START WITH ORG_TYP = '0'
        CONNECT BY PRIOR TMP.ORG_NUM = TMP.UP_ORG_NUM
        UNION ALL
        SELECT TMP.ORG_NUM AS INST_ID,
               TMP.UP_ORG_NUM AS PARENT_INST_ID,
               LTRIM(SYS_CONNECT_BY_PATH(TMP.ORG_NUM, ','), ',') AS CODE_PATH
        FROM (SELECT A.ORG_NUM,
                     CASE WHEN A.ORG_TYP = '9' THEN NULL ELSE A.UP_ORG_NUM END AS UP_ORG_NUM,
                     A.ORG_TYP
                FROM TESTNOW A
               WHERE A.DATA_DATE = 20180430) TMP
        START WITH ORG_TYP = '9'
        CONNECT BY PRIOR TMP.ORG_NUM = TMP.UP_ORG_NUM) 
      SELECT SUBSTR(',' || A.CODE_PATH || ',', INSTR(',' || A.CODE_PATH, ',', 1, B.RN) + 1, INSTR(A.CODE_PATH || ',', ',', 1, B.RN) - INSTR(',' || A.CODE_PATH, ',', 1, B.RN)) AS INST_ID,
             A.INST_ID AS SUB_INST_ID,
             CASE
               WHEN B.RN = 1 THEN
                'root'
               ELSE
                SUBSTR(',' || A.CODE_PATH || ',', INSTR(',' || A.CODE_PATH, ',', 1, B.RN - 1) + 1, INSTR(A.CODE_PATH || ',', ',', 1, B.RN - 1) - INSTR(',' || A.CODE_PATH, ',', 1, B.RN - 1))
             END UP_INST_ID,
             CODE_PATH
      FROM TMP A,
           (SELECT ROWNUM RN
            FROM DUAL
            CONNECT BY ROWNUM < 10) B
      WHERE LENGTH(A.CODE_PATH) - LENGTH(REPLACE(A.CODE_PATH, ',')) + 1 >= B.RN; 



select connect_by_root t.bank_org_code hq_bank_org_cd,
connect_by_root t.branch_cd hq_branch_cd,
t.branch_cd,
t.busi_dt,
t.org_type_cd,
t.org_type_name,
t.branch_cd_org
from TESTDWH t
where t.busi_dt = date '2018-04-30'
start with org_type_cd = '0'
connect by nocycle prior t.branch_cd_org = t.branch_cd_up
union all
select connect_by_root t2.bank_org_code hq_bank_org_cd,
connect_by_root t2.branch_cd hq_branch_cd,
t2.branch_cd,
t2.busi_dt,
t2.org_type_cd,
t2.org_type_name,
t2.branch_cd_org
from TESTDWH t2
where t2.busi_dt = date '2018-04-30'
start with org_type_cd = '9'
connect by nocycle prior t2.branch_cd_org = t2.branch_cd_up;






 

转载于:https://www.cnblogs.com/ayumie/p/9922853.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值