我有一个关系表(id,parentId,name)
我想转换成扁平的维度表
(id,Level1,Level2,Level3,Level4)
我可以将深度固定在4深处。
我使用递归CTE和pivot取得了进展,但结果集不正确
我得到了
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
我做错了什么?
答案 0 :(得分: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的练习,它无用,但它可以满足你的需要。