我的帐户结构是基于树的:
代码 | 标题 |
---|---|
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 级倾斜
如何在单独的列中逐级获取所有父标题名称?
您可以检测 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
结果与上面相同。