下面是一个参考
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
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
单据号 相关单据号 所属流程
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 (相关单据号,单据号) )
谢谢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
…… 流到 ……
那么所属流程字段会越来越长