簡體   English   中英

SQL:扁平化層次結構,缺少級別

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM