Karena Permission is NOT NULL
harus dalam hierarki, maka baris ini menjadi simpul akar untuk kasus ini. Saya telah memberi label ini RootID
di sini
Juga menambahkan lebih banyak data sampel untuk menampilkan beberapa cabang dari ParentID = 0
yang sama akar
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');