日期:2014-05-18  浏览次数:20478 次

一个数据统计算问题,请前辈指点!!先感谢前辈哈!!

表结构
表名:学生名册
学号               姓名     班级
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