use pubs go /* 表结构为: ID PID Data 0 0 。 1 0 。 2 1 。 3 1 。 4 0 。 5 2 。 6 5 。
需要得出结果如下(形成树型结构): 1 0 。 2 1 。 5 2 。 6 5 。 3 1 。 4 0 。 */ --建立表格 create table tree_view ( id int null, pid int null, data varchar(10) null ) --测试数据,没有采取上面的数据,道理一样,名字便于演示 insert into tree_view values (0,0,‘飞鸟‘) insert into tree_view values (1,0,‘怡红公子‘) insert into tree_view values (2,0,‘空军一号‘) insert into tree_view values (3,0,‘开心就好‘) insert into tree_view values (4,0,‘xwj58‘) insert into tree_view values (5,1,‘瘤子良‘) insert into tree_view values (6,1,‘my liu‘) insert into tree_view values (7,6,‘八神苍月‘) insert into tree_view values (8,6,‘糊涂虫‘) insert into tree_view values (9,6,‘红色水晶‘) insert into tree_view values (10,2,‘大脸猫‘) insert into tree_view values (11,2,‘cpa2000‘) insert into tree_view values (12,6,‘蚕宝宝‘) insert into tree_view values (13,6,‘erquan‘) --临时表 create table #temp (lev int,id int) create table #temp_result(rowid int identity,lev int,id int)
declare @lev int,@now_id int select @lev = 0,@now_id = 0
insert into #temp values(@lev,@now_id) while (@lev >= 0) begin if exists(select * from #temp where lev = @lev) begin select top 1 @now_id = id from #temp where lev = @lev insert #temp_result (lev,id) values (@lev,@now_id)
delete from #temp where lev = @lev and id = @now_id
insert #temp select @lev + 1,id from tree_view where pid = @now_id and pid <> id if (@@rowcount > 0) set @lev = @lev + 1 end else set @lev = @lev - 1 end --以树型方式展示结果 select ‘The tree is displayed below:‘ = replicate(char(9),lev) + i.data from #temp_result d join tree_view i on (d.id = i.id) order by rowid
--结果显示 /* The tree is displayed below: 飞鸟 怡红公子 瘤子良 my liu 八神苍月 糊涂虫 红色水晶 蚕宝宝 erquan 空军一号 大脸猫 cpa2000 开心就好 xwj58 */ /*这个代码的思路是在基本表中循环,将遇到的接点放到临时表,接点下的子接点放到另张临时表,循环时,检查第一个接点下是否还有 子接点,然后进行处理,处理完了就在工作表中删除,直到所有的接点都进行了遍历 */
|