2015-12-30 67 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