SQL Server函数获取层次结构中的顶级父级

Nit*_*bra 3 sql sql-server sql-server-2012

我有以下表(master_group)结构:

code    name                      under 

1       National Sales Manager    1
2       regional sales manager    1 
3       area sales manager        2 
4       sales manager             3
Run Code Online (Sandbox Code Playgroud)

如何获得特定行的最终父项,例如:

code    name                      under     ultimateparent

1       National Sales Manager    1         1
2       regional sales manager    1         1
3       area sales manager        2         1
4       sales manager             3         1
Run Code Online (Sandbox Code Playgroud)

Gio*_*uri 5

递归CTE从头到尾都是:

with cte as(
  select *, code as ultimate from t where code = under
  union all
  select t.*, c.ultimate from t
  join cte c on c.code = t.under
  where t.code <> t.under
)
select * from cte
Run Code Online (Sandbox Code Playgroud)

对于数据:

create table t (code int, name varchar(100), under int)
insert into t values
(1, 'National Sales Manager', 1),
(2, 'regional sales manager', 1),
(3, 'area sales manager', 2),
(4, 'sales manager', 3),
(5, 'a', 5),
(6, 'b', 5),
(7, 'c', 5),
(8, 'd', 7),
(9, 'e', 7),
(10, 'f', 9),
(11, 'g', 9)
Run Code Online (Sandbox Code Playgroud)

它生成输出:

code    name                    under   ultimate
1       National Sales Manager  1       1
5       a                       5       5
6       b                       5       5
7       c                       5       5
8       d                       7       5
9       e                       7       5
10      f                       9       5
11      g                       9       5
2       regional sales manager  1       1
3       area sales manager      2       1
4       sales manager           3       1
Run Code Online (Sandbox Code Playgroud)

小提琴http://sqlfiddle.com/#!6/17c12e/1