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)
递归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
归档时间: |
|
查看次数: |
5395 次 |
最近记录: |