应该是每个节点后面跟子节点,子节点再跟子子节点,若无子子节点,再跟子节点.
类似
id x pid
1  a 0
2  b 1
3  c 2
4  d 2
5  e 3
6  f 1
7  g 3以level缩进,容易看明白
1 2 3 4 5 第n级
----------------
a
  b
    c
      e
      g
    d
  f
    
实际排序结果就是
a
b
c
e
g
d
f

解决方案 »

  1.   


    前天写的一个。楼主可以参考:
    create table bommd(节点 varchar(10),md003 varchar(3))
    insert into bommd select 'H','A'
    insert into bommd select 'A','B'
    insert into bommd select 'A','C'
    insert into bommd select 'B','D'
    insert into bommd select 'B','E'
    insert into bommd select 'C','F'
    insert into bommd select 'C','G'    declare @md001 varchar(10)
        declare @md003 varchar(10)
        declare @temp table(md001 varchar(10),md003 varchar(3))
        insert into @temp select * from bommd a where not exists(select * from bommd where md003=a.md001)--根节点
        declare cur cursor for select * from bommd where md001 =(select md003 from @temp)
        open cur
        fetch next from cur into @md001,@md003
        while(@@fetch_status=0)
        begin
            insert into @temp values (@md001,@md003)
            if exists(select * from bommd where md001=@md003)
            begin
                insert into @temp select * from bommd where md001=@md003
            end
            fetch next from cur into @md001,@md003
        end
        close cur
        deallocate cur
    select * from @temp 
      

  2.   


    根据楼主的需求修改如下:
    create table bommd(节点 int,描述 varchar(20),父节点 int,层级 int)
    insert into bommd select 1,'工程设计',0,0
    insert into bommd select 7,'设计确认',1,1
    insert into bommd select 2,'施工图设计',1, 1
    insert into bommd select 5,'施工图详细设计',2 ,2 
    insert into bommd select 6,'施工图综合', 2, 2 
    insert into bommd select 4,'施工图概略设计',2, 2 
    insert into bommd select 3,'设计审核',1, 1 
    insert into bommd select 9,'自审',3 ,2 
    insert into bommd select 10,'专家审核',3, 2 
     
        declare @节点 int
        declare @描述 varchar(10)
        declare @父节点 int
        declare @层级 int
        declare @temp table(节点 int,描述 varchar(20),父节点 int,层级 int)
        insert into @temp select * from bommd where 父节点=0--根节点
        declare cur cursor for select * from bommd where 父节点 =(select 节点 from @temp) order by 节点
        open cur
        fetch next from cur into @节点,@描述,@父节点,@层级
        while(@@fetch_status=0)
        begin
            insert into @temp values (@节点,@描述,@父节点,@层级)
            if exists(select * from bommd where 父节点=@节点)
            begin
                insert into @temp select * from bommd where 父节点=@节点 order by 节点
            end
            fetch next from cur into @节点,@描述,@父节点,@层级
        end
        close cur
        deallocate cur
        select * from @temp
      

  3.   


    create table bommd(节点 int,描述 varchar(20),父节点 int,层级 int)
    insert into bommd select 1,'工程设计',0,0
    insert into bommd select 7,'设计确认',1,1
    insert into bommd select 2,'施工图设计',1, 1
    insert into bommd select 5,'施工图详细设计',2 ,2 
    insert into bommd select 6,'施工图综合', 2, 2 
    insert into bommd select 4,'施工图概略设计',2, 2 
    insert into bommd select 3,'设计审核',1, 1 
    insert into bommd select 9,'自审',3 ,2 
    insert into bommd select 10,'专家审核',3, 2
    declare @T table(节点 int,描述 varchar(20),父节点 int,层级 int,lev int,order_Flie varchar(1000))
    declare @lev int
    set @lev=1
    insert @T select 节点,描述,父节点,层级,@lev,cast(节点 as varchar) from bommd where 父节点=0
    while @@Rowcount>0
    begin
        set @lev=@lev+1
        insert @T select B.节点,B.描述,B.父节点,B.层级,@lev,T.order_Flie+cast(B.节点 as varchar)
                    from bommd B,
                         @T T
                    where B.父节点=T.节点
                      and T.lev=@lev-1end
    select 节点,描述,父节点,层级 from @T order by order_Flie