下面是一个参考
create table #(Parent_id int,item_id  int )
insert into #(Parent_id,item_id) values(1,0)
insert into #(Parent_id,item_id) values(2,1)
insert into #(Parent_id,item_id) values(3,1)
insert into #(Parent_id,item_id) values(4,2)
insert into #(Parent_id,item_id) values(5,2)
insert into #(Parent_id,item_id) values(6,3)
insert into #(Parent_id,item_id) values(7,2)
insert into #(Parent_id,item_id) values(8,3)
insert into #(Parent_id,item_id) values(9,7)
insert into #(Parent_id,item_id) values(10,9)set nocount on
declare @ int,@i int
set @=2
declare @t table(Parent_id int,item_id  int,iv int)
declare @t1 table(Parent_id int,item_id  int)
insert into @t1
select * from  #  where item_id=2
set @i=1
while  exists(select TOP 1 * from @t1)
begin
 insert into @t(Parent_id ,item_id ,iv )
 select *,@i from @t1
 delete from  @t1
  insert into @t1    
  select * from  # where item_id  in (select Parent_id from @t where iv=@i)
  set @i=@i+1
end
select * from @t
drop table #
set nocount off

解决方案 »

  1.   

    1、在你的表里加一列用来标识属于哪个流程的如:\
      单据号 相关单据号  所属流程
      3     流到    4    1
      2     流到    1    1
      1     流到    a    1
      a     流到    b    1
      c     流到    e    2
      b     流到    c    2
      a     流到    m    2
      m     流到    n    2
      p     流到    q    2
      ……  流到    ……你这样设计表的化你查询就很方便如用select * from 你的表 where 所属流程 in (select 所属流程 from 你的表 where 'a' in (相关单据号,单据号) )
      

  2.   

    caiyunxia(monkey),您好,你的方法好像不错,我正测试,我用的是sybase,不支持select top。
    谢谢pengdali(大力)指点,但是所属流程会随着单据流转由一个源流分成多条支流,那么所属流程的字段的值可能后面的流的所属流程继承上级的所属流程,如:
      单据号 相关单据号  所属流程
      3     流到    4    '第0流':0
      2     流到    1    '第0流':0
      1     流到    a    '第1流':01
      a     流到    b    '第1流':01
      c     流到    e    '第1流':01
      b     流到    c    '第1流':01
      a     流到    m    '第2流':02
      m     流到    n    '第2流':02
      p     流到    q    '第2流':02
      ……  流到    ……
    那么所属流程字段会越来越长
      

  3.   

    谢谢caiyunxia(monkey),sql server上可以执行,你太棒了,有没有更棒的算法
      

  4.   

    对了,还有后面一个问题; cyberwjw(cyberwjw) :怎么写,