回答一道题目,关于T-SQL递归查询的
2011-03-13 21:57
253 查看
提问:
id mc parent
1 机械 -1
2 化工机械 1
3 反应器 2
相得到
id mc parent rj
1 机械 -1 机械
2 化工机械 1 机械\化工机械
3 反应器 2 机械\化工机械反应器
关键是树结构的层次不确定,不知道有多少级
解答:
关键点:CTE,拼接字符串
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,拼接字符串
相关文章推荐
- 一道关于竞赛图的题目
- 搜狗一道java题目 关于对象 synchronized 关键字作用在 int, integer
- 一道关于二维数组与指针的题目
- 一道关于public,private,protected继承的经典题目
- 好文摘抄 [C语言]关于指针和int型的一道题目
- 关于设计模式的一道题目
- Python中一道关于字符串分割的题目
- 关于js字符串替换的一道笔试题目
- 关于《程序员面试宝典5》中的一道堆栈题目
- 关于一道面试题目的理解
- 关于一道cout题目
- 关于short的一道简单题目
- [C语言]关于指针和int型的一道题目
- 关于一道题目解法
- 百度一道关于算法的面试题目
- 一道关于随机数生成的题目
- 一道关于C++ 的面试题目(继承、构造函数以及析构函数)
- 关于字符的一道很容易做错的题目
- 关于切图的一道题目
- 一道经典的C++题,关于分钱的问题,适合新手阅读(黑客X档案论坛题目) [c#]