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 回答