2015-12-30 68 views
0

我的查询工作基于CTE Recursion to get tree hierarchy显示了我的层次结构树。将根节点添加到SQL CTE层次结构树

结果看起来像

- Category 
- Category 
- - SubCategory 
- - - Sub SubCategory 
- - SubCategory 
... 

我想根节点添加到我的树,但我没有看到如何做到这一点。我如何将根节点添加到这棵树?

编辑:我目前的查询看起来是这样的:

;WITH Tree as 
(
    Select Parent_ID, ParentDescr, Node_ID, Node, 1 as Level, cast(Node as varchar(max)) as Path 
    FROM Nodes 
    WHERE ParentDescr = 'Root' 

    UNION ALL 

    Select A.Parent_ID, A.ParentDescr, A.Node_ID, A.Node, Level + 1 as Level, cast(B.Path + ' | ' + A.Node as varchar(max)) as Path 
    FROM Nodes A 
    INNER JOIN Tree B ON A.PARENT_ID = B.Node_ID 
    WHERE A.ParentDescr <> 'Root' 
) 
SELECT REPLICATE(' - ', level) + Node as Tree, Path, Node_ID, ParentDescr, PARENT_ID 
from Tree 
ORDER BY Path asc 

下面是一些样本数据:

SELECT * 
FROM (
VALUES 
('123','Root',NULL,NULL), 
('456','Category','123','Root'), 
('789','SubCategory','456','Category'), 
('012','Sub SubCategory','789','SubCategory'), 
('345','Category','123','Root')) AS vtable 
([Class_ID],[Class],[Parent_ID],[ParentClass]) 

结果应该是这样的:

Root 
- Category 
- - SubCategory 
- - - Sub SubCategory 
- Category 
+0

您发布的代码有什么问题?你有错误吗? –

+0

没有错,我只是想添加根节点。 – MAW74656

+0

在我看来,你已经掌握了它,因为联盟的上半部分使用'ParentDescr ='Root''。所以你得到什么错误? –

回答

0

其实,我想你只需要改变这一点:

WHERE ParentDescr = 'Root' 

要这样:

WHERE Node = 'Root' 

,同样,改变这种:

WHERE A.ParentDescr <> 'Root' 

要这样:

WHERE A.Node <> 'Root' 

编辑:

根据您的样本数据,我的改变应该有工作d如果你正确实施它们。验证您的新查询是这样的:

;WITH Tree as 
(
    Select Parent_ID, ParentDescr, Node_ID, Node, 1 as Level, cast(Node as varchar(max)) as Path 
    FROM Nodes 
    WHERE Node = 'Root' 

    UNION ALL 

    Select A.Parent_ID, A.ParentDescr, A.Node_ID, A.Node, Level + 1 as Level, cast(B.Path + ' | ' + A.Node as varchar(max)) as Path 
    FROM Nodes A 
    INNER JOIN Tree B ON A.PARENT_ID = B.Node_ID 
    WHERE A.Node <> 'Root' --this line really isn't even necessary 
) 
SELECT REPLICATE(' - ', level) + Node as Tree, Path, Node_ID, ParentDescr, PARENT_ID 
from Tree 
ORDER BY Path asc 

它应该工作。

+0

这给我只有根节点。 – MAW74656

+0

那么就得看看你的原始数据。猜测它并没有削减它。 –

+0

请参阅上面的修改。 – MAW74656