我覺得父節點必須在它的子節點之前。 這裏是我的查詢
DECLARE @SampleData AS TABLE(ID int, Name varchar(20) , ParentID int)
INSERT INTO @SampleData VALUES ( 1 ,' Item 1', -1 )
INSERT INTO @SampleData VALUES (2 ,' Item 2' , -1 )
INSERT INTO @SampleData VALUES ( 3 ,' Item 1.1' , 1 )
INSERT INTO @SampleData VALUES ( 4 ,' Item 1.2' , 1 )
INSERT INTO @SampleData VALUES ( 5 ,' Item 2.1' , 2 )
INSERT INTO @SampleData VALUES ( 6 ,' Item 1.1.1' , 4 )
INSERT INTO @SampleData VALUES ( 7 ,' Item 1.2.1' , 6 )
INSERT INTO @SampleData VALUES ( 8 ,' Item 2.2' , 2 )
;with cte as (
select t.Id, t.Name, t.ParentID, 1 as lev, t.Id AS RootId
from @SampleDAta t
where t.ParentID = -1
union all
select t.ID, t.Name,t.ParentID,cte.lev +1, cte.RootId
from cte
INNER JOIN @SampleDAta t on t.ParentID = cte.Id
)
SELECT c.Id, c.Name, c.ParentID FROM cte c
ORDER BY c.RootId, c.lev
OPTION (MAXRECURSION 0)
結果:
如果你想有點像一個深度搜索樹,我可以通過一個函數
CREATE TABLE SampleData (ID int, Name varchar(20) , ParentID int)
INSERT INTO SampleData VALUES ( 1 ,' Item 1', -1 )
INSERT INTO SampleData VALUES (2 ,' Item 2' , -1 )
INSERT INTO SampleData VALUES ( 3 ,' Item 1.1' , 1 )
INSERT INTO SampleData VALUES ( 4 ,' Item 1.2' , 1 )
INSERT INTO SampleData VALUES ( 5 ,' Item 2.1' , 2 )
INSERT INTO SampleData VALUES ( 6 ,' Item 1.1.1' , 3 )
INSERT INTO SampleData VALUES ( 7 ,' Item 1.2.1' , 4 )
INSERT INTO SampleData VALUES ( 8 ,' Item 2.2' , 2 )
做現在創建功能
CREATE FUNCTION DisplayTree
(
@RootId int
)
RETURNS
@result TABLE (
ID int, Name varchar(20) , ParentID int
)
AS
BEGIN
DECLARE @Temp AS TABLE
(
ID int, Name varchar(20) , ParentID int
)
INSERT INTO @Temp SELECT * FROM SampleData WHERE ParentID = @RootId
WHILE(EXISTS(SELECT 1 FROM @Temp t))
BEGIN
DECLARE @CurrentRootId int
SELECT TOP 1 @CurrentRootId = t.ID FROM @Temp t ORDER BY t.ID ASC
INSERT INTO @result SELECT * FROM @Temp t WHERE t.ID = @CurrentRootId
DELETE FROM @Temp WHERE ID = @CurrentRootId
INSERT INTO @result SELECT * FROM dbo.DisplayTree(@CurrentRootId)
END
RETURN ;
END
GO
AND執行功能
SELECT * FROM dbo.DisplayTree(-1)
mysql或MS SQL-Server? – Jens
MS SQL-Server bro。 –
不要添加與您的問題無關的標籤 – Jens