需要通过递归或通过查询连接的level1,level2,level3,level4,level5,level6结果

问题描述 投票:0回答:1

我的帐户结构是基于树的:

代码 标题
1 abc
1-1 kk
1-1-1 dfgf
1-1-1-1 dfsd
1-1-1-1-1-1 sdfsd
1-1-1-1-1-1-1 sccdfsd

我在这棵树中有 5000 条记录 需要明智的结果

爷爷奶奶,爸爸,孩子........

1 级倾斜、2 级倾斜、3 级倾斜、4 级倾斜、5 级倾斜、6 级倾斜、7 级倾斜、8 级倾斜、9 级倾斜

如何在单独的列中逐级获取所有父标题名称?

sql oracle oracle11g hierarchical-data
1个回答
0
投票

您可以检测 CODE 列中定义父母身份级别的元素数量,并在 PIVOT 中使用它来获取标题:

WITH      --  S a m p l e   D a t a :
    tbl AS
        ( Select '1' "CODE", 'abc' "TITLE" From Dual Union All
          Select '1-1' "CODE", 'kkk' "TITLE" From Dual Union All
          Select '1-1-1' "CODE", 'dfgf' "TITLE" From Dual Union All
          Select '1-1-1-1' "CODE", 'dfsd' "TITLE" From Dual Union All
          Select '1-1-1-1-1' "CODE", 'sdfsd' "TITLE" From Dual Union All
          Select '1-1-1-1-1-1' "CODE", 'sccdfsd' "TITLE" From Dual 
        )
--  S Q L :
Select  Max(TITLE_1) "TITLE_1", Max(TITLE_2) "TITLE_2", Max(TITLE_3) "TITLE_3", 
        Max(TITLE_4) "TITLE_4", Max(TITLE_5) "TITLE_5", Max(TITLE_6) "TITLE_6"
From    ( Select    CODE, TITLE, Length(CODE) - Length(Replace(CODE, '-')) + 1 "LVL"
          From  tbl
        )
        PIVOT( Max(TITLE) For LVL IN(1 "TITLE_1", 2 "TITLE_2", 3 "TITLE_3", 
                                     4 "TITLE_4", 5 "TITLE_5", 6 "TITLE_6",
                                     7 "TITLE_7", 8 "TITLE_8", 9 "TITLE_9")  )
Order By CODE
/*    R e s u l t :
TITLE_1 TITLE_2 TITLE_3 TITLE_4 TITLE_5 TITLE_6
------- ------- ------- ------- ------- -------
abc     kkk     dfgf    dfsd    sdfsd   sccdfsd   */

如果你想使用connect by,你只需更改内部sql,如下所示:

Select  Max(TITLE_1) "TITLE_1", Max(TITLE_2) "TITLE_2", Max(TITLE_3) "TITLE_3", 
        Max(TITLE_4) "TITLE_4", Max(TITLE_5) "TITLE_5", Max(TITLE_6) "TITLE_6"
From    ( Select    CODE, TITLE, LEVEL "LVL"
          From  tbl
          Where LEVEL = Length(CODE) - Length(Replace(CODE, '-')) + 1
          Connect By LEVEL <= Length(CODE) - Length(Replace(CODE, '-')) + 1
        )
        PIVOT( Max(TITLE) For LVL IN(1 "TITLE_1", 2 "TITLE_2", 3 "TITLE_3", 
                                     4 "TITLE_4", 5 "TITLE_5", 6 "TITLE_6",
                                     7 "TITLE_7", 8 "TITLE_8", 9 "TITLE_9")  )
Order By CODE

结果与上面相同。

© www.soinside.com 2019 - 2024. All rights reserved.