回答一道题目,关于T-SQL递归查询的

提问:

id mc parent
1 机械 -1
2 化工机械 1
3 反应器 2

相得到   
id mc parent rj
1 机械 -1 机械
2 化工机械 1 机械\化工机械
3 反应器 2 机械\化工机械反应器


关键是树结构的层次不确定,不知道有多少级

解答:

  
    
use InsideTSQL2008;
go

if OBJECT_ID ( ' dbo.Test_tab ' ) is not null
drop table dbo.Test_tab;
create table dbo.Test_tab
(
id
int primary key ,
mc
nvarchar ( 100 ) not null ,
parentid
int not null
);

insert into dbo.Test_tab(id,mc,parentid) values ( 1 , ' 机械 ' , 0 );
insert into dbo.Test_tab(id,mc,parentid) values ( 2 , ' 化工机械 ' , 1 );
insert into dbo.Test_tab(id,mc,parentid) values ( 3 , ' 反应器 ' , 2 );
insert into dbo.Test_tab(id,mc,parentid) values ( 4 , ' 化工反应器 ' , 3 );
insert into dbo.Test_tab(id,mc,parentid) values ( 5 , ' 石油化工反应器 ' , 4 );
insert into dbo.Test_tab(id,mc,parentid) values ( 6 , ' 采油机械 ' , 1 );
insert into dbo.Test_tab(id,mc,parentid) values ( 7 , ' ' , 2 );

with cte as
(
select t.id,t.parentid, 0 as levels, CONVERT ( nvarchar ( 1000 ),t.mc) as mc from dbo.Test_tab as t
where t.id = 1
union all
select ttt.id,ttt.parentid,tt.levels + 1 , convert ( nvarchar ( 1000 ),tt.mc + ' \ ' + ttt.mc) from cte as tt
inner join dbo.Test_tab ttt on ttt.parentid = tt.id
)
select * from cte
 关键点:CTE,拼接字符串

你可能感兴趣的:(t-sql)