拼合分层的数据集,在 Oracle 中

标签: sql Oracle
发布时间: 2017/4/15 18:23:50
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

我有一组数据,如下所示

TREENAME DATE       LEVEL PARENTNODE    CHILDNODE
GRN_KK   9/1/2012   1     null          ALLACCOUNT
GRN_KK   9/1/2012   2     ALLACCOUNT     52000
GRN_KK   9/1/2012   2     ALLACCOUNT     59900
GRN_KK   9/1/2012   3     52000       54311
GRN_KK   9/1/2012   3     52000       50100
GRN_KK   9/1/2012   3     52000       54345
GRN_KK   9/1/2012   3     52000       54346
GRN_KK   9/1/2012   3     52000       54347
GRN_KK   9/1/2012   4     50100       50151

我需要拼合此数据如下所示︰

GRN_KK         9/2/2012     ALLACCOUNT           52000
GRN_KK         9/2/2012     ALLACCOUNT           52000      54311
GRN_KK         9/2/2012     ALLACCOUNT           52000      50100
GRN_KK         9/2/2012     ALLACCOUNT           52000      50100     50151
GRN_KK         9/2/2012     ALLACCOUNT           59900

等等。

我可以有到 30 的父母子女关系

我使用的连接和 sys_connect_by_path ,如下所示

    select A.TREE_NAME,A.EfFDT,A.PARENT_NODE_NAME,A.TREE_NODE, sys_connect_by_path(A.TREE_NODE, '/')
FROM PSTREENODE A
WHERE A.TREE_NAME = 'MDA_GRN_KK'
AND A.EFFDT = ( 
 SELECT MAX(A1.EFFDT) 
  FROM PSTREENODE A1 
 WHERE A.SETID = A1.SETID 
   AND A.SETCNTRLVALUE = A1.SETCNTRLVALUE 
   AND A.TREE_NAME = A1.TREE_NAME 
   AND A.TREE_NODE_NUM = A1.TREE_NODE_NUM 
   AND A.TREE_NODE = A1.TREE_NODE 
   AND A.TREE_BRANCH = A1.TREE_BRANCH 
   AND A1.EFFDT <= sysdate)
connect by nocycle prior  A.TREE_NODE = A.PARENT_NODE_NAME;

结果集是太大。在此表中有其他的树和我不认为它看起来在指定 TREE_NAME 。其潜水我各种各样的组合。

任何人可以帮我了吗

在此先感谢

解决方法 1:

如果你想要看到树 'MDA_GRN_KK' 那就是层次结构中的"根"。您指定的根使用 START WITH 子句。我通常把它右前 CONNECT BY :

... beginning of your query ...
START WITH A.TREE_Name = 'MDA_GRN_KK'
connect by nocycle prior  A.TREE_NODE = A.PARENT_NODE_NAME
赞助商