create table Expense(Owner varchar(256),Amount decimal(9))
insert into Expense select 'SD1','10'
insert into Expense select 'SD2','10'
insert into Expense select 'SD17','10'
insert into Expense select 'SD18','5'
insert into Expense select 'SD11','10'
insert into Expense select 'CY000002','1'
insert into Expense select 'SD2','10'
create table viewOwner(Name varchar(256),Id varchar(256),FatherId varchar(256))
insert into viewOwner select 'bjglb','SD11','C'
insert into viewOwner select 'jls','SD1','C' insert into viewOwner select 'zhb','SD2','C' insert into viewOwner select 'zhbgs','SD17','SD2'
insert into viewOwner select 'st','SD18','SD2'
insert into viewOwner select 'wcglb','SD10','C'
insert into viewOwner select 'wcglblp','CY000002','SD10'
go
--建一个函数
Create function fn_部门(
@id varchar(256)
)
returns varchar(256)
as
begin
declare @r varchar(256)
declare @fid varchar(256)
declare @Name varchar(256)
set @r=@id
select @Name=Name,@fid=FatherId from viewOwner where id=@id
while @fid <>'C'
begin
set @r=@fid
select @Name=Name,@fid=FatherId from viewOwner where id=@r
end
return @Name
end
go--查询
select dbo.fn_部门(Owner) as 部门,
sum(Amount) as 用款总额
from Expense
group by dbo.fn_部门(Owner)--结果
部门 用款总额
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ----------------------------------------
bjglb 10
jls 10
wcglb 1
zhb 35(所影响的行数为 4 行)
insert into Expense select 'SD1','10'
insert into Expense select 'SD2','10'
insert into Expense select 'SD17','10'
insert into Expense select 'SD18','5'
insert into Expense select 'SD11','10'
insert into Expense select 'CY000002','1'
insert into Expense select 'SD2','10'
create table viewOwner(Name varchar(256),Id varchar(256),FatherId varchar(256))
insert into viewOwner select 'bjglb','SD11','C'
insert into viewOwner select 'jls','SD1','C' insert into viewOwner select 'zhb','SD2','C' insert into viewOwner select 'zhbgs','SD17','SD2'
insert into viewOwner select 'st','SD18','SD2'
insert into viewOwner select 'wcglb','SD10','C'
insert into viewOwner select 'wcglblp','CY000002','SD10'
go
--建一个函数
Create function fn_部门(
@id varchar(256)
)
returns varchar(256)
as
begin
declare @r varchar(256)
declare @fid varchar(256)
declare @Name varchar(256)
set @r=@id
select @Name=Name,@fid=FatherId from viewOwner where id=@id
while @fid <>'C'
begin
set @r=@fid
select @Name=Name,@fid=FatherId from viewOwner where id=@r
end
return @Name
end
go--查询
select dbo.fn_部门(Owner) as 部门,
sum(Amount) as 用款总额
from Expense
group by dbo.fn_部门(Owner)--结果
部门 用款总额
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ----------------------------------------
bjglb 10
jls 10
wcglb 1
zhb 35(所影响的行数为 4 行)
SD!应该改为SD1