首页 新闻 赞助 找找看

求助,Sql更新数据问题

0
悬赏园豆:20 [已关闭问题]

表结构如下:

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个字段?太麻烦了.

请问各位有什么简单点的办法没有?

麻烦各位各舒己见,不胜感激!

Pwd的主页 Pwd | 初学一级 | 园豆:158
提问于:2009-11-23 15:51
< >
分享
其他回答(3)
0

可以多分几张表出来,比如一个年级一张表这样子,字段相对会少很多吧

死神的背影 | 园豆:667 (小虾三级) | 2009-11-23 16:15
谢谢兄弟. 只是举个例子,如果是有10个学校,每个学校又有3个年级,每个年级又有10个班了.` 这样,你的提议就不可以了. 我现在就是感觉更新数据时一次只能更新一条,太麻烦了..想找个更简单的方法``
支持(0) 反对(0) Pwd | 园豆:158 (初学一级) | 2009-11-23 16:41
0

建立一个表rptscore有以下字段

sid          int           自动增长

classid    int           班级

60以下    int           

60-80     int

80以上    int

以上是建表

一滴血 | 园豆:1602 (小虾三级) | 2009-11-23 16:42
谢谢,这样建表是可以的,其实报表还更复杂,下面还有关于男生女生的汇总. 我现在比较头痛的是 第二个步骤.就是对数据库数据进行更新,这个太麻烦了,要一条一条的写,很郁闷.
支持(0) 反对(0) Pwd | 园豆:158 (初学一级) | 2009-11-27 09:29
0

你不能建个视图,用班级来分组吗?把视图传给报表不就OK了

苏飞 | 园豆:2024 (老鸟四级) | 2009-11-24 14:23
请多指教下,谢谢!.
支持(0) 反对(0) Pwd | 园豆:158 (初学一级) | 2009-11-27 09:29
0

代码
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 行)

 

如果成绩分段不多,可以这样做,但是不知道你成绩和是要成绩的总和还是人数的总和,这里我用的是成绩总和,如果要求人数总和的话改成人数的就可以了。

清海扬波 | 园豆:825 (小虾三级) | 2009-12-04 16:57
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册