0

次の要件があります。

入力

CID ParentID

1   10
2   1
3   1
4   2
5   2
6   2
7   2
8   4
9   4
10  NULL
20  25
30  38
15  51
17  71

子の値を 4 として渡すと、次のように出力されます。

望ましい出力:

CID ParentID
2   4
1   2
10  1
NULL    10
4   2
4   8
2   4
2   5
2   6
1   3
2   7

    

助けてください!前もって感謝します。

4

1 に答える 1

0

あなたの説明とデータが一致しません。結果の行 (4, 2) は (4,9) になるはずだと思います。私が正しければ、これはあなたが望むことをするはずです:

with Parents(lvl, CID, ParentID) as (
  select 0, ParentID, CID
  from T
  where CID = 4
  union all
  select lvl+1, T.ParentID, T.CID
  from T join Parents
  on T.CID = Parents.CID
)
  select CID, ParentID
  from Parents
  union all
  select T.ParentID, T.CID
  from T join Parents
  on Parents.ParentID = T.ParentID;

ここでSQLフィドル。

于 2013-08-02T06:10:00.593 に答える