2016-04-16 10 views
0

私のデータは次のとおりです。どのようにプロシージャを書くことができますか?

enter image description here

マイ手続きのコードは次のとおりです。

CREATE PROCEDURE SearchParent 
    @ID bigint = 7 
AS 
BEGIN 
    -- how write code to get data like picture down 
END 
GO 

私はデータのように戻るにはどうすればよい:

enter image description here

+2

再帰的CTEについての例をご覧ください。 –

答えて

2
DECLARE @ID bigint = 7 

DECLARE @table TABLE 
(
    id bigint, 
    name nvarchar(2), 
    parentid bigint 
) 

INSERT INTO @table 
VALUES (1, 'a', 0), (2, 'b1', 1), (3, 'b2', 1), 
     (4, 'c1', 2), (5, 'c2', 2), (6, 'd1', 3), 
     (7, 'd2', 3) 

--This part goes into the procedure 
;WITH cte AS 
(
    SELECT 
     id, name, parentid 
    FROM 
     @table --change table name to yours 
    WHERE 
     id = @ID 

    UNION ALL 

    SELECT 
     t.* 
    FROM 
     cte c 
    INNER JOIN 
     @table t ON c.parentid = t.id 
) 
SELECT * 
FROM cte 
ORDER BY id ASC 
OPTION (MAXRECURSION 100) 

出力:

id name parentid 
---- ---- --------- 
1 a 0 
3 b2 1 
7 d2 3 
+0

コードを説明できますか? – shahroz

+0

これを読んでhttps://technet.microsoft.com/en-us/library/ms186243%28v=sql.105%29.aspxを明確にすることができます – gofr1

関連する問題