一个数据统计算问题,请前辈指点!!先感谢前辈哈!!
表结构
表名:学生名册
学号 姓名 班级
20050001 张三 1班
20050002 李四 2班
表名:学生缴费
学号 缴费金额 学期
20050001 500 2006-2007-2
20050001 400 2006-2007-1
20050002 300 2006-2007-2
表名:学生领书
学号 教材名称 单价 学期
20050001 软件工程 25 2006-2007-2
20050001 photoshop教程 35 2006-2007-2
20050002 coreldraw教程 30 2006-2007-1
20050001 coreldraw教程 30 2006-2007-1
实现目标:
想按学期给学生结算费用,想达到下面这种格式(这是我想的格式,其它的也可以哈)?小弟万分感激!!
表名:学生退费
学号 学期 缴纳 支出 退费
20050001 2006-2007-1 400 30 370
20050001 2006-2007-2 500 60 440
------解决方案--------------------select 学号,学期,sum(isnull(缴费金额,0)) 缴费,sum(isnull(单价,0)) 支出,sum(isnull(缴费金额,0))-sum(isnull(单价,0)) 退费 from 学生缴费 a left join 学生领书 b on a.学号=b.学号 and a.学期=b.学期 group by a.学号,a.学期,b.学号,b.学期
------解决方案--------------------select a.学号,b.学期,缴纳=b.缴费金额,支出=sum(c.单价),退费=b.缴费金额-sum(c.单价)
from 学生名册 a
left join 学生缴费 b
on a.学号=b.学号
left join 学生领书 c
on b.学号=c.学号 and b.学期=c.学期
group by a.学号,b.学期,b.缴费金额
------解决方案----------------------原始数据:@学生名册
declare @学生名册 table(学号 int,姓名 varchar(4),班级 varchar(4))
insert @学生名册
select 20050001, '张三 ', '1班 ' union all
select 20050002, '李四 ', '2班 '
--原始数据:@学生缴费
declare @学生缴费 table(学号 int,缴费金额 int,学期 varchar(12))
insert @学生缴费
select 20050001,500, '2006-2007-2 ' union all
select 20050001,400, '2006-2007-1 ' union all
select 20050002,300, '2006-2007-2 '
--原始数据:@学生领书
declare @学生领书 table(学号 int,教材名称 varchar(13),单价 int,学期 varchar(12))
insert @学生领书
select 20050001, '软件工程 ',25, '2006-2007-2 ' union all
select 20050001, 'photoshop教程 ',35, '2006-2007-2 ' union all
select 20050002, 'coreldraw教程 ',30, '2006-2007-1 ' union all
select 20050001, 'coreldraw教程 ',30, '2006-2007-1 '
select a.学号,b.学期,缴纳=b.缴费金额,支出=sum(c.单价),退费=b.缴费金额-sum(c.单价)
from @学生名册 a
left join @学生缴费 b
on a.学号=b.学号
left join @学生领书 c
on b.学号=c.学号 and b.学期=c.学期
group by a.学号,b.学期,b.缴费金额
/*
学号 学期 缴纳 支出 退费
20050001 2006-2007-1 400 30 370
20050001 2006-2007-2 500 60 440
20050002