递归SQL联接
我有一个表,希望递归地将这个表与其自身连接起来,以获得层次结构。这就是表格的外观:递归SQL联接,sql,join,powerpivot,Sql,Join,Powerpivot,我有一个表,希望递归地将这个表与其自身连接起来,以获得层次结构。这就是表格的外观: IDParent | IDChild | Level | Value ---------------------------------- 1 | 2 | 0 | 500 2 | 3 | 1 | 700 3 | 4 | 2 | 900 ... ... ... 它应该是这样的
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获取结果表的简单解决方案,它也将对我有很大帮助:
多谢各位
简单解决方案:
层次结构表内部使用ON T1.IDChild=T2.IDParent子句连接自身。
在T1.IDChild=T2.IDParent子句上使用尽可能多的内部联接层次结构T2,以获得更多层次结构级别
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通用表表达式解决方案:
锚节将获取树的根,递归成员定义将获取所有其他记录
您使用的是哪种DBMS?是的,简单的解决方案是它应该是什么样子。但是,有没有一种解决方案可以自动做到这一点?因此,当你有30个级别时,写这么多的连接子句需要做很多工作
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