yx-树形结构展示,父子关系显示为完整树形

ID1,org_name,org_id ,parent_org_id

ID2,org_name,org_id ,parent_org_id

变为

 ID1  org_id1, org_name1,org_id2,org_name2,org_id3, org_name3...

 ID2  org_id1, org_name1,org_id2,org_name2,org_id3, org_name3...

将自己部门的完整信息用一条记录显示。

 

--------------------------------------------------------------------

 SELECT
 T.ID,
 CONNECT_BY_ISLEAF ,   --是否为最叶子节点
 CONNECT_BY_ROOT T.NODENAME,   --根节点节点名字
 LTRIM(SYS_CONNECT_BY_PATH(T.NODENAME,'-'),'-'),   --连接各节点
 LEVEL  --层
 FROM TREETEST T   
  START WITH FATHERID IS NULL   --选择根节点
 CONNECT BY PRIOR ID=FATHERID   --prior在前,表示从根节点开始遍历,CONNECT BY ID=PRIOR  FATHERID表示从叶子节点开始遍历
 ORDER BY T.ID

--------------------------------------------------------------------

 

 

第一步,将完整路径拼接到一起

 (    SELECT   org_id,
                          org_name,
                          LTRIM (SYS_CONNECT_BY_PATH (org_name, '->'), '->')
                             org_tree_path,
                          LEVEL treelevel
                   FROM   sys_org
             START WITH   org_id = 0
             CONNECT BY   PRIOR org_id = parent_org_id)

第二步,拆分完整路径,分配到各个字段(这里取5层为例)


/* Formatted on 2011-11-21 15:40:49 (QP5 v5.114.809.3010) */
CREATE OR REPLACE FORCE VIEW AICS.V_OPER_ORG_TREE
(
   OP_ID,
   TREELEVEL,
   ORG_NAME_1,
   ORG_NAME_2,
   ORG_NAME_3,
   ORG_NAME_4,
   ORG_NAME_5
)
AS
   SELECT   a.op_id,
            treelevel,
            CASE treelevel
               WHEN 1
               THEN
                  org_tree_path
               ELSE
                  SUBSTR (org_tree_path, 1, INSTR (org_tree_path, '->') - 1)
            END
               org_name_1,
            CASE treelevel
               WHEN 1
               THEN
                  NULL
               WHEN 2
               THEN
                  SUBSTR (org_tree_path, INSTR (org_tree_path, '->') + 2)
               ELSE
                  SUBSTR (org_tree_path,
                          INSTR (org_tree_path, '->') + 2,
                            INSTR (org_tree_path,
                                   '->',
                                   1,
                                   2)
                          - INSTR (org_tree_path, '->')
                          - 2)
            END
               org_name_2,
            CASE treelevel
               WHEN 1
               THEN
                  NULL
               WHEN 2
               THEN
                  NULL
               WHEN 3
               THEN
                  SUBSTR (org_tree_path, INSTR (org_tree_path,
                                                '->',
                                                1,
                                                2)
                                         + 2)
               ELSE
                  SUBSTR (org_tree_path, INSTR (org_tree_path,
                                                '->',
                                                1,
                                                2)
                                         + 2,   INSTR (org_tree_path,
                                                       '->',
                                                       1,
                                                       3)
                                              - INSTR (org_tree_path,
                                                       '->',
                                                       1,
                                                       2)
                                              - 2)
            END
               org_name_3,
            CASE treelevel
               WHEN 1
               THEN
                  NULL
               WHEN 2
               THEN
                  NULL
               WHEN 3
               THEN
                  NULL
               WHEN 4
               THEN
                  SUBSTR (org_tree_path, INSTR (org_tree_path,
                                                '->',
                                                1,
                                                3)
                                         + 2)
               ELSE
                  SUBSTR (org_tree_path, INSTR (org_tree_path,
                                                '->',
                                                1,
                                                3)
                                         + 2,   INSTR (org_tree_path,
                                                       '->',
                                                       1,
                                                       4)
                                              - INSTR (org_tree_path,
                                                       '->',
                                                       1,
                                                       3)
                                              - 2)
            END
               org_name_4,
            CASE treelevel
               WHEN 1
               THEN
                  NULL
               WHEN 2
               THEN
                  NULL
               WHEN 3
               THEN
                  NULL
               WHEN 4
               THEN
                  NULL
               WHEN 5
               THEN
                  SUBSTR (org_tree_path, INSTR (org_tree_path,
                                                '->',
                                                1,
                                                4)
                                         + 2)
               ELSE
                  SUBSTR (org_tree_path, INSTR (org_tree_path,
                                                '->',
                                                1,
                                                4)
                                         + 2,   INSTR (org_tree_path,
                                                       '->',
                                                       1,
                                                       5)
                                              - INSTR (org_tree_path,
                                                       '->',
                                                       1,
                                                       4)
                                              - 2)
            END
               org_name_5
     FROM   sys_oper a,
            (    SELECT   org_id,
                          org_name,
                          LTRIM (SYS_CONNECT_BY_PATH (org_name, '->'), '->')
                             org_tree_path,
                          LEVEL treelevel
                   FROM   sys_org
             START WITH   org_id = 0
             CONNECT BY   PRIOR org_id = parent_org_id) b
    WHERE   a.org_id = b.org_id;
 

---------------------------------------------------------------------------------------------------------

 SELECT
 T.ID,
 CONNECT_BY_ISLEAF ,   --是否为最叶子节点
 CONNECT_BY_ROOT T.NODENAME,   --根节点节点名字
 LTRIM(SYS_CONNECT_BY_PATH(T.NODENAME,'-'),'-'),   --连接各节点
 LEVEL  --层
 FROM TREETEST T   
  START WITH FATHERID IS NULL   --选择根节点
 CONNECT BY PRIOR ID=FATHERID   --prior在前,表示从根节点开始遍历,CONNECT BY ID=PRIOR  FATHERID表示从叶子节点开始遍历
 ORDER BY T.ID

 


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值