select 学号=isnull(a.学号,b.学号)
,年级=isnull(a.年级,b.年级)
,书费=sum(a.书费)
,杂费=sum(a.杂费)
,学费=sum(b.学费)
,总费用=sum(isnull(a.书费,0)+isnull(a.杂费,0)+isnull(b.学费,0))
from A表 a
full join B表 b on a.学号=b.学号
,年级=isnull(a.年级,b.年级)
,书费=sum(a.书费)
,杂费=sum(a.杂费)
,学费=sum(b.学费)
,总费用=sum(isnull(a.书费,0)+isnull(a.杂费,0)+isnull(b.学费,0))
from A表 a
full join B表 b on a.学号=b.学号
select 学号=isnull(a.学号,b.学号)
,年级=isnull(a.年级,b.年级)
,书费=sum(a.书费)
,杂费=sum(a.杂费)
,学费=sum(b.学费)
,总费用=sum(isnull(a.书费,0)+isnull(a.杂费,0)+isnull(b.学费,0))
from A表 a
full join B表 b on a.学号=b.学号
group by isnull(a.学号,b.学号),isnull(a.年级,b.年级)
,书费=sum(a.书费)
,杂费=sum(a.杂费)
,学费=sum(b.学费)
,总费用=sum(isnull(a.书费,0)+isnull(a.杂费,0)+isnull(b.学费,0))
from A表 a join B表 b on a.学号=b.学号
group by a.学号,a.年级
select a.*,b.学费,总费用=a.书费+a.杂费+b.学费
from(
select 学号,年级,书费=sum(书费),杂费=sum(杂费)
from @A表 group by 学号,年级
) a join(
select 学号,年级,学费=sum(学费)
from @B表 group by 学号,年级
) b on a.学号=b.学号 and a.年级=b.年级
--方法2,可能某个学号只在一个表中出现的情况
select 学号=isnull(a.学号,b.学号)
,年级=isnull(a.年级,b.年级)
,书费=isnull(a.书费,0)
,杂费=isnull(a.杂费,0)
,学费=isnull(b.学费,0)
,总费用=isnull(a.书费,0)+isnull(a.杂费,0)+isnull(b.学费,0)
from(
select 学号,年级,书费=sum(书费),杂费=sum(杂费)
from @A表 group by 学号,年级
) a join(
select 学号,年级,学费=sum(学费)
from @B表 group by 学号,年级
) b on a.学号=b.学号 and a.年级=b.年级
declare @A表 table(学号 int,年级 int,学期 int,书费 int,杂费 int)
insert into @A表
select 1,1,1,100,50
union all select 1,1,2,200,50
union all select 2,1,1,150,30
union all select 2,1,2,200,80declare @B表 table(学号 int,年级 int,学费 int)
insert into @B表
select 1,1,500
union all select 2,1,300--方法1,可能某个学号只在一个表中出现的情况
select a.*,b.学费,总费用=a.书费+a.杂费+b.学费
from(
select 学号,年级,书费=sum(书费),杂费=sum(杂费)
from @A表 group by 学号,年级
) a join(
select 学号,年级,学费=sum(学费)
from @B表 group by 学号,年级
) b on a.学号=b.学号 and a.年级=b.年级--方法2,可能某个学号只在一个表中出现的情况
select 学号=isnull(a.学号,b.学号)
,年级=isnull(a.年级,b.年级)
,书费=isnull(a.书费,0)
,杂费=isnull(a.杂费,0)
,学费=isnull(b.学费,0)
,总费用=isnull(a.书费,0)+isnull(a.杂费,0)+isnull(b.学费,0)
from(
select 学号,年级,书费=sum(书费),杂费=sum(杂费)
from @A表 group by 学号,年级
) a join(
select 学号,年级,学费=sum(学费)
from @B表 group by 学号,年级
) b on a.学号=b.学号 and a.年级=b.年级
/*--测试结果:学号 年级 书费 杂费 学费 总费用
----------- ----------- ----------- ----------- ----------- -----------
1 1 300 100 500 900
2 1 350 110 300 760(所影响的行数为 2 行)学号 年级 书费 杂费 学费 总费用
----------- ----------- ----------- ----------- ----------- -----------
1 1 300 100 500 900
2 1 350 110 300 760(所影响的行数为 2 行)
--*/
create table t1(学号 int,年级 int,学期 int,书费 int,杂费 int)
insert t1 Select 1, 1 , 1, 100 , 50
union all select 1 , 1 , 2 , 200 , 50
union all select 2 , 1 , 1 , 150 , 30
union all select 2 , 1, 2 , 200, 80create table t2 (学号 int,年级 int,学费 int)
insert t2 values(1,1,500)
insert t2 values(2,1,300)Select a.学号,a.年级,sum(a.书费) as 书费,sum(a.杂费) as 杂费,b.学费,sum(a.书费)+sum(a.杂费)+b.学费 as 总费用
from t1 a
left join t2 b on a.学号 = b.学号
group by a.学号,a.年级,b.学费
学号 年级 书费 杂费 学费 总费用
----------- ----------- ----------- ----------- ----------- -----------
1 1 300 100 500 900
2 1 350 110 300 760(所影响的行数为 2 行)
from A表 A,B表 B
where A.學號=B.學號 and A.年級=B.年級
group by A.學號,A.年級