在過去兩天中,我一直試圖找到一個儘可能動態的高效解決方案,但我無法做到。你有沒有提示下面的例子?我嘗試了一個遞歸調用,以獲得下面的結果到目前爲止的「級別」或本機連接。使用T-SQL有效地構建DWH從父 - 子表格
我有 「initTable」:
parent | child
-------+------
A | H
A | B
A | C
B | D
B | G
C | F
D | E
我想有 「finalTable」:(與動態創建列 「levelX」 的bescase
level1 | level2 | level 3 | level 4
-------+--------+---------+---------
A | A | A | H
A | A | C | F
A | A | B | G
A | B | D | E
嘗試#1:遞歸方式獲得水平
問:是否有可能在遞歸過程中爲每個級別創建一列?
WITH recTable (father, child, lev) AS
(
SELECT
p1.father,
p1.child,
0 as lev
FROM
initTable AS p1
WHERE
p1.father = 'A'
UNION ALL
SELECT
p1.father,
p1.child,
lev+1
FROM
initTable AS p1
INNER JOIN
recTable as p2 ON p1.father = p2.child
)
SELECT * FROM ASD
嘗試#2:但 「錯誤」 訂單
在這裏,我需要填補列 「向後」 莫名其妙......
SELECT
p1.child AS Level 1,
p2.child AS Level 2,
p3.child AS Level 3,
p4.child AS Level 4
FROM
initTable p1
LEFT JOIN
initTable p2 ON p1.child = p2.father
LEFT JOIN
initTable p3 ON p2.child = p3.father
LEFT JOIN
initTable p4 ON p3.child = p4.father
WHERE
p1.father= 'A'
是否有人知道好的和有效的方法來解決這個問題?我覺得我很接近,但目前爲止我還無法解決這個問題。
我沒有看到你想達到什麼樣的邏輯。例如,在第1行A-A-A-H中,這是什麼意思?對我來說,它看起來就像是A-H,但是你用頂級父母填充它,所以你在所有字段中都有值? –
準確地說,我想在所有字段的「父」值爲dwh報告原因 – Kevinski42
@marc_s:謝謝編輯帖子(現在我知道它是如何做到這一點) – Kevinski42