分享

阅读帖子需要得出结果如下(形成树型结构):

 accesine 2005-11-14

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
*/
/*这个代码的思路是在基本表中循环,将遇到的接点放到临时表,接点下的子接点放到另张临时表,循环时,检查第一个接点下是否还有
子接点,然后进行处理,处理完了就在工作表中删除,直到所有的接点都进行了遍历
*/

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多