34,594
社区成员
发帖
与我相关
我的任务
分享
create table T(ParentID nvarchar(5), ID nvarchar(5),num int)
insert T values('A', 'A1',2) -- //A由2个A1和1个A2组成
insert T values('A' ,'A2', 1)
insert T values('A1', 'A11', 1) --//A1又由1个A11和2个A22组成
insert T values('A1', 'A12', 2)
go
create function F_Num(@ParentID nvarchar(5),@num int=1)
returns @T table(ID nvarchar(5),num int)
as
begin
declare @i int
set @i=1
declare @T2 table( ParentID nvarchar(5), ID nvarchar(5),num int,lev int)
insert @T2
select
ParentID,ID,num*@num,@i --这里改一下手误
from T
where
ParentID=@ParentID
while @@rowcount>0
begin
set @i=@i+1
insert @T2
select
a.ParentID,
a.ID,
a.num*b.Num,
@i
from
T a join @T2 b on a.ParentID=b.ID and b.lev=@i-1
end
insert @T
select ID,sum(Num) from @T2 a where not exists(select 1 from @T2 where ParentID=a.ID) group by ID
return
end
go
select * from F_Num('A',1)
select * from F_Num('A1',1)
ID num
----- -----------
A11 2
A12 4
A2 1
(所影响的行数为 3 行)
ID num
----- -----------
A11 1
A12 2
(所影响的行数为 2 行)
create table T(ParentID nvarchar(5), ID nvarchar(5),num int)
insert T values('A', 'A1',2) -- //A由2个A1和1个A2组成
insert T values('A' ,'A2', 1)
insert T values('A1', 'A11', 1) --//A1又由1个A11和2个A22组成
insert T values('A1', 'A1', 2)
go
create function F_Num(@ParentID nvarchar(5),@num int=1)
returns @T table(ID nvarchar(5),num int)
as
begin
declare @i int
set @i=1
declare @T2 table( ParentID nvarchar(5), ID nvarchar(5),num int,lev int)
insert @T2
select *,num*@num from T where ParentID=@ParentID
while @@rowcount>0
begin
set @i=@i+1
insert @T2
select
a.ParentID,
a.ID,
a.num*b.Num,
@i
from
T a join @T2 b on a.ParentID=b.ID and b.lev=@i-1
end
insert @T
select ID,sum(Num) from @T2 a where not exists(select 1 from @T2 where ParentID=a.ID) group by ID
return
end
go
select * from F_Num('A',1)
select * from F_Num('A1',1)
ID num
----- -----------
A1 2
A2 1
(所影响的行数为 2 行)
ID num
----- -----------
A11 1
(所影响的行数为 1 行)