我有一个表,想要递归地连接这个表以获得层次结构。所以这就是表格的样子:
IDParent | IDChild | Level | Value
----------------------------------
1 | 2 | 0 | 500
2 | 3 | 1 | 700
3 | 4 | 2 | 900
... ... ...
这就是它应该是这样的:
IDLvl0 | IDLvl1 | ValueLvl1 | IDLevel2 | ValueLvl2 ...
------------------------------------------------------
1 | 2 | 500 | 3 | 700 ...
首选结果表应与PowerPivot一起使用,因此如果您知道使用mdx或PowerPivot获取结果表的简单解决方案,它也会对我有很大帮助:)
谢谢
答案 0 :(得分:1)
简单解决方案:
Hierarchy
表INNER JOIN
本身带有ON T1.IDChild = T2.IDParent
子句。
使用尽可能多的INNER JOIN Hierarchy T2 ON T1.IDChild = T2.IDParent
子句来获得更多层次结构级别。
CREATE TABLE Hierarchy (IDParent int, IDChild int, Level int, Value int);
INSERT Hierarchy VALUES (1,2,0,500),(2,3,1,700),(3,4,2,900);
SELECT T1.IDChild, T1.IDParent, T2.IDChild, T2.IDParent, T3.IDChild, T3.IDParent
FROM Hierarchy T1
INNER JOIN Hierarchy T2 ON T1.IDChild = T2.IDParent
INNER JOIN Hierarchy T3 ON T2.IDChild = T3.IDParent
CTE(通用表格表达式)解决方案: 锚点将获取树的根,递归成员定义将获取所有其他记录。
WITH CTE (IDParent, IDChild, [Level], Value, LVL)
AS
(
-- Anchor member definition
SELECT IDParent, IDChild, [Level], Value, 0 as LVL
FROM Hierarchy AS h
WHERE h.IDParent = 1
UNION ALL
-- Recursive member definition : will help us calculate true on-the-fly recursive hierarchy levels
SELECT h.IDParent, h.IDChild, h.[Level], h.Value, LVL + 1
FROM Hierarchy AS h
INNER JOIN CTE
ON h.IDParent = CTE.IDChild
where (h.IDChild <> 1)
)
select * from CTE