sql server中的父子层次结构

时间:2013-08-02 05:38:10

标签: sql sql-server-2008-r2 common-table-expression

我有以下要求,

输入

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

请帮忙!提前谢谢。

1 个答案:

答案 0 :(得分: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小提琴here