0

我有一个关系表(id、parentId、name)

我想将其转换为扁平尺寸表

(id, Level1, Level2, Level3, Level4)

我可以将深度固定在 4 深。

我在递归 CTE 和数据透视方面取得了进展,但结果集不正确

我明白了

Id  Name   Level1 Level2
0   Root   NULL   NULL
1   NULL   L1     NULL

但是我需要

Id  Name   Level1 Level2
0   Root   NULL   NULL
1   Root   L1     NULL

这是我必须约会的

with rcte as
(
      select h.id
      ,h.parent_id
      ,h.name
      ,1 as HierarchyLevel 
  FROM RelTable h
  where id = 1
  union all
  select h2.id
       , h2.parent_id 
      , h2.name
      , r.HierarchyLevel + 1 AS HierarchyLevel 
  FROM RelTable h2
  inner join rcte r on h2.parent_id = r.id
 )
select id, parent_id, [1] as L1,[2] as L2,[3] as L3, [4] as L4
from (
select id,parent_id,name,HierarchyLevel from rcte
) as src
pivot  ( max(name)  for HierarchyLevel   in ([1],[2],[3],[4]) ) as pvt

我究竟做错了什么?

4

1 回答 1

2

解决方案过于复杂?如果它固定在四个深度,那么它可以通过一些简单的连接来完成......

SELECT
    L1.id as ID
    L1.Name as Level1
    L2.Name as Level2
    L3.Name as Level3
    L4.Name as Level4
FROM
    RelTable as L1

        INNER JOIN
    RelTable as L2
        ON L1.id = L2.ParentID

        INNER JOIN
    RelTable as L3
        ON L2.id = L3.ParentID

        INNER JOIN
    RelTable as L4
        ON L3.id = L4.ParentID

作为使用 CTE 的练习,它没有用,但它可以满足您的需要。

于 2010-10-26T17:34:56.693 回答