3

この構造のテーブルがあります:

ParentProjectID  ChildProjectID
------------------------------    
     101             102
     102             103
     103             104
     201             202
     202             203

シナリオを説明しましょう。プロジェクトを更新するとき、これを新しいプロジェクトとして扱い、親プロジェクトの下に入力します。

102 はその親 102 の子プロジェクトであり、子 103 の親は 102 などです。

さて、私の質問は、祖父母、親子を見つけることです。

上記の例のように、101 は 102、103、および 104 の祖父母です。そして、102 は 103 および 104 の親です。

だから、私は私の結果を次のようにしたい:

(のパラメータとして 101 を渡す場合ParentProjectID)

ParentProjectID  ChildProjectID
      101             102
      101             103
      101             104

どんな助けでも大歓迎です。

4

1 に答える 1

2

再帰的な共通テーブル式を使用できます。

create procedure usp_Descendants
(
  @ParentProjectID int
)
as
begin
    ;with cte as (
         select
             T.ChildProjectID
         from Table1 as T
         where T.ParentProjectID = @ParentProjectID
         union all
         select
             T.ChildProjectID
         from cte as c
             inner join Table1 as T on T.ParentProjectID = c.ChildProjectID
    )
    select
        @ParentProjectID, c.ChildProjectID
    from cte as c
end

exec usp_Descendants @ParentProjectID = 101;
-----------
101     102
101     103
101     104

exec usp_Descendants @ParentProjectID = 101;
-----------
102     103
102     104

sql fiddle demo

于 2013-09-21T16:12:20.220 に答える