表结构如下:
sid | int |
studentname | nvarchar(10) |
studentclass | nvarchar(10) |
studentscore | int |
其中数据如下:
sid | studentname | studentclass | studentscore |
1 | 张三 | 1班 | 55 |
2 | 李四 | 2班 | 65 |
3 | 王五 | 1班 | 75 |
4 | 赵六 | 2班 | 85 |
5 | 刘七 | 1班 | 90 |
现在想用rdlc报表做出如下效果:
60以下成绩和 | 60~80成绩和 | 80以上成绩和 | |
一班 | |||
二班 | |||
三班 |
我现在是这样做的:
1.建立一个表rptscore有以下字段
sid | int (自动增长) |
班级1_60以下 | int |
班级1_60_80 | int |
班级1_80以上 | int |
班级2_60以下 | int |
班级2_60_80 | int |
班级2_80以上 | int |
2.建立一个存储过程
这个存储过程从基础表中读数据,先更新"班级1_60以下",接着是"班级1_60_80","班级1_80以上","班级1_80以上","班级2_60以下","班级2_60_80","班级2_80以上",
就这样,数据被一个一个的更新上去.
3.建立DataSet,将字段拖入rdlc报表.
我现在就是感觉这样做特别麻烦,如果有3个年级,每个年级各10班级,那我岂不是要为表建立91个字段?太麻烦了.
请问各位有什么简单点的办法没有?
麻烦各位各舒己见,不胜感激!
可以多分几张表出来,比如一个年级一张表这样子,字段相对会少很多吧
建立一个表rptscore有以下字段
sid int 自动增长
classid int 班级
60以下 int
60-80 int
80以上 int
以上是建表
你不能建个视图,用班级来分组吗?把视图传给报表不就OK了
declare @t table(sid int,studentname nvarchar(10),studentclass nvarchar(10),studentscore int)
insert @t
select 1, '张三', '1班', 55
union all
select 2, '李四', '2班', 65
union all
select 3, '王五', '1班', 75
union all
select 4, '赵六', '2班', 85
union all
select 5, '刘七', '1班', 90
union all
select 6, '刘七', '3班', 90
select studentclass,
'60以下成绩和'=sum(case when studentscore<60 then studentscore else 0 end),
'60~80成绩和'=sum(case when studentscore>=60 and studentscore<80 then studentscore else 0 end),
'80以上成绩和'=sum(case when studentscore>=80 then studentscore else 0 end)
from @t
group by studentclass
studentclass 60以下成绩和 60~80成绩和 80以上成绩和
------------ ----------- ----------- -----------
1班 55 75 90
2班 0 65 85
3班 0 0 90
(所影响的行数为 3 行)
如果成绩分段不多,可以这样做,但是不知道你成绩和是要成绩的总和还是人数的总和,这里我用的是成绩总和,如果要求人数总和的话改成人数的就可以了。