用sql2000查询如何实现
create table tb(id varchar(3) ,pid varchar(8), zid varchar(8) , dw varchar(10))
insert into tb values('1' , 'A0001','10001', '1')
insert into tb values('2' , '10001','10002', '1')
insert into tb values('3' , 'A0001','20001', '1')
insert into tb values('4' , '20001','20002', '1')
insert into tb values('5' , '10002',' ', '1')
insert into tb values('6' , '20002',' ', '1')
go
表内容如下: 序号 父件 子件 单位用量
1 A0001 10001 1
2 10001 10002 1
3 A0001 20001 1
4 20001 20002 1
5 10002 1
6 20002 1
查询如何实现这个: 层次 父件 子件 单位用量
1 A0001 10001 1
2 10001 10002 1
3 10002 1
2 20001 20002 1
3 20002 1
create table tb(id varchar(3) ,pid varchar(8), zid varchar(8) , dw varchar(10))
insert into tb values('1' , 'A0001','10001', '1')
insert into tb values('2' , '10001','10002', '1')
insert into tb values('3' , 'A0001','20001', '1')
insert into tb values('4' , '20001','20002', '1')
insert into tb values('5' , '10002',' ', '1')
insert into tb values('6' , '20002',' ', '1')
go
表内容如下: 序号 父件 子件 单位用量
1 A0001 10001 1
2 10001 10002 1
3 A0001 20001 1
4 20001 20002 1
5 10002 1
6 20002 1
查询如何实现这个: 层次 父件 子件 单位用量
1 A0001 10001 1
2 10001 10002 1
3 10002 1
2 20001 20002 1
3 20002 1
drop table tb
go
create table tb(id varchar(3) ,pid varchar(8), zid varchar(8) , dw varchar(10))
insert into tb values('1' , 'A0001','10001', '1')
insert into tb values('2' , '10001','10002', '1')
insert into tb values('3' , 'A0001','20001', '1')
insert into tb values('4' , '20001','20002', '1')
insert into tb values('5' , '10002',' ', '1')
insert into tb values('6' , '20002',' ', '1')
go declare @t table(层次 int,父件 varchar(8),子件 varchar(8),单位用量 int,px varchar(8000))
declare @lvl int
set @lvl=1
insert @t select @lvl,pid,zid,dw,right('00000'+ltrim(id),5) from tb where zid=' '
while @@rowcount>0
begin
set @lvl=@lvl+1
insert @t select @lvl,a.pid,a.zid,a.dw,b.px+right('00000'+ltrim(a.id),5) from tb a,@t b where a.zid=b.父件 and b.层次=@lvl-1
end
select space(层次-1)+ltrim(层次) 层次,父件,子件,单位用量 from @t order by px/*
层次 父件 子件 单位用量
1 10002 1
2 10001 10002 1
3 A0001 10001 1
1 20002 1
2 20001 20002 1
3 A0001 20001 1
*/
1 A0001 10001 1
2 10001 10002 1
3 10002 1
2 20001 20002 1
3 20002 1