[英]SQL: Flatten hierarchy with missing levels
我有一個帶有父子層次結構的表以及一列,該列告訴當前ID在哪個層次結構級別上。
一個例子:
id pid level
A H1
B A H2
C B H3
D C H4
E H1
F E H3
G F H4
我希望將其轉置或展平,為最低層的每個id創建兩行。
像這樣:
id H1 H2 H3 H4
D A B C D
G E F G
您可以使用樞軸在SQL中做到嗎? 我在想,也許“級別”列的值可以用作結果表中各列的名稱? 值“ H1”映射到列名“ H1”,依此類推。
存儲過程也是我可能想到的一種可能的解決方案。 有人做過這樣的事情嗎?
謝謝你的幫助!
/安德烈亞斯
我創建了一個包含您的數據的表ttt。 該查詢將為您樞軸划分五個級別:
select id
, [H1], [H2], [H3], [H4], [H5]
from
(
select distinct
coalesce(c6.id,c5.id,c4.id,c3.id,c2.id,c1.id) as id
, c1.id as lid
, c1.level
from ttt c1
left join ttt c2
on c1.id = c2.pid
left join ttt c3
on c2.id = c3.pid
left join ttt c4
on c3.id = c4.pid
left join ttt c5
on c4.id = c5.pid
left join ttt c6
on c5.id = c6.pid ) as sourcetable
pivot ( max(lid)
for level in ([H1], [H2], [H3], [H4], [H5])
) as pivottable;
您可以在sqlfiddle中查看它: 示例
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.