क्योंकि Permission is NOT NULL
पदानुक्रम में होना चाहिए, तो यह पंक्ति इस मामले के लिए रूट नोड बन जाती है। मैंने इसे RootID
लेबल किया है यहाँ
एक ही ParentID = 0
. से कई शाखाओं को दिखाने के लिए और अधिक नमूना डेटा भी जोड़ा जड़
DECLARE @t TABLE (NodeId int, NodeName varchar(100), ParentId int, Permission int)
INSERT @t VALUES
(1,'Node1',0,NULL),
(2,'Node2',1,1),
(3,'Node3',1,NULL),
(4,'Node4',1,NULL),
(5,'Node5',2,NULL),
(6,'Node6',5,NULL),
(7,'Node7',2,NULL),
(8,'Node1',0,NULL),
(9,'Node9',8,2),
(10,'Node10',9,NULL),
(11,'Node11',10,NULL),
(12,'Node12',11,NULL),
(13,'Node13',10,NULL),
(14,'Node14',9,NULL);
WITH CTE AS
(
SELECT NodeId, NodeName, ParentId AS RootID FROM @t WHERE Permission IS NOT NULL
UNION ALL
SELECT T.NodeId, T.NodeName, CTE.RootID
FROM @t T JOIN CTE ON T.ParentId = CTE.NodeId
)
SELECT
*
FROM
CTE
WHERE
NodeName IN ('Node6', 'Node13');