Select a.学号,a.年级,isnull(sum(a.书费),0) 书费,isnull(sum(a.杂费),0) 杂费,b.学费,isnull(sum(a.书费),0)+isnull(sum(a.杂费),0)+isnull(b.学费,0) 总费用 from a left join b on a.学号 = b.学号 group by a.学号,a.年级,b.学费
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
--创建数据测试环境
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,80
declare @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,每个学号都会在两个表中出现的处理方法
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.年级
select a.学号,a.年级
,书费=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.年级
--上面的语句忘了写group,改一下:
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.年级)
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.学号