递归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