求SQL语句..关于自动生成

zhouhan0048 2008-07-09 08:11:35
学校设置了各专业,在专业下开设班级,每个班级包含若干学生,
学生信息至少需要包含学号、姓名、性别、年龄、生源所在地、已修学分总数等数据项;
另外,需要有地区信息,用于统计某一地区的学生数;
课程信息表至少需包含课程编号、课程名称、任课教师、开课学期、学时、考试或考查、学分等数据项,课程根据班级开设。
教师信息至少需要包含教师编号、姓名、性别、年龄、职称、联系电话等数据项;
学生成绩至少需要学号,学期,课程名称,成绩,任课老师等数据项;
需要实现以下业务处理和查询功能
学生成绩按每学年成绩统计
学生成绩名次排定
每门课程平均成绩统计
学生所学课程及学分统计
对每个学生输入成绩的时候,自动生成学生的已修学分总数
教师任课查询
班级课程开设查询

教我写下.."对每个学生输入成绩的时候,自动生成学生的已修学分总数"
谢谢各位高手了
...全文
249 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
arrow_gx 2008-07-10
  • 打赏
  • 举报
回复
在数据库里面,可以用 计算列 的方法,不过不建议这么做,对程序的查错非常不利

这个流程应该用程序来实现,查询语句如下:

SELECT sum((CASE WHEN 成绩 >= 60 THEN 2 ELSE 0 END)) as 学分,学生姓名
from 成绩表 where ......
-晴天 2008-07-09
  • 打赏
  • 举报
回复
create trigger 增加学分 on 学生成绩
after insert
as
update 学生信息 set 学分=学分+(select 学分 from 课程信息表 a inner join inserted b on a.课程名称=b.课程名称) from 学生信息 a inner join inserted b on a.学号=b.学号 where b.成绩>=60
go

create trigger 降低学分 on 学生成绩
after delete
as
update 学生信息 set 学分=学分-(select 学分 from 课程信息表 a inner join deleted b on a.课程名称=b.课程名称) from 学生信息 a inner join inserted b on 学号=b.学号 where b.成绩>=60
go

create trigger 更改学分 on 学生成绩
after update
as
if exists(select 1 from inserted a inner join deleted b on a.学号=b.学号 where a.成绩>=60 and b.成绩<60)
update 学生信息 set 学分=学分+(select 学分 from 课程信息表 a inner join deleted b on a.课程名称=b.课程名称) *
isnull((select 1 from inserted a inner join deleted b on a.学号=b.学号 where a.成绩>=60 and b.成绩<60),1) *
isnull((select 0 from inserted a inner join deleted b on a.学号=b.学号 where a.成绩>=60 and b.成绩>=60),1) *
isnull((select 0 from inserted a inner join deleted b on a.学号=b.学号 where a.成绩<60 and b.成绩<60),1) *
isnull((select -1 from inserted a inner join deleted b on a.学号=b.学号 where a.成绩<60 and b.成绩>=60),1) from 学生信息 a inner join inserted b on a.学号=b.学号
go
-晴天 2008-07-09
  • 打赏
  • 举报
回复
create trigger 增加学分 on 学生成绩
after insert
as
update 学生信息 set 学分=学分+(select 学分 from 课程信息表 a inner join inserted b on a.课程名称=b.课程名称) from 学生信息 a inner join inserted b on a.学号=b.学号 where b.成绩>=60
go

create trigger 降低学分 on 学生成绩
after delete
as
update 学生信息 set 学分=学分-(select 学分 from 课程信息表 a inner join deleted b on a.课程名称=b.课程名称) from 学生信息 a inner join inserted b on 学号=b.学号 where b.成绩>=60
go

create trigger 更改学分 on 学生成绩
after update
as
if exists(select 1 from inserted a inner join deleted b on a.学号=b.学号 where a.成绩>=60 and b.成绩<60)
update 学生信息 set 学分=学分+(select 学分 from 课程信息表 a inner join deleted b on a.课程名称=b.课程名称) *
isnull((select 1 from inserted a inner join deleted b on a.学号=b.学号 where a.成绩>=60 and b.成绩<60),1) *
isnull((select 0 from inserted a inner join deleted b on a.学号=b.学号 where a.成绩>=60 and b.成绩>=60),1) *
isnull((select 0 from inserted a inner join deleted b on a.学号=b.学号 where a.成绩<60 and b.成绩<60),1) *
isnull((select -1 from inserted a inner join deleted b on a.学号=b.学号 where a.成绩<60 and b.成绩>=60),1) from 学生信息 a inner join inserted b on a.学号=b.学号
go
-晴天 2008-07-09
  • 打赏
  • 举报
回复
create trigger 增加学分 on 学生成绩
after insert
as
update 学生信息 set 学分=学分+(select 学分 from 课程信息表 a inner join inserted b on a.课程名称=b.课程名称) from 学生信息 a inner join inserted b on a.学号=b.学号 where b.成绩>=60
go

create trigger 降低学分 on 学生成绩
after delete
as
update 学生信息 set 学分=学分-(select 学分 from 课程信息表 a inner join deleted b on a.课程名称=b.课程名称) from 学生信息 a inner join inserted b on 学号=b.学号 where b.成绩>=60
go

create trigger 更改学分 on 学生成绩
after update
as
if exists(select 1 from inserted a inner join deleted b on a.学号=b.学号 where a.成绩>=60 and b.成绩<60)
update 学生信息 set 学分=学分+(select 学分 from 课程信息表 a inner join deleted b on a.课程名称=b.课程名称) *
isnull((select 1 from inserted a inner join deleted b on a.学号=b.学号 where a.成绩>=60 and b.成绩<60),1) *
isnull((select 0 from inserted a inner join deleted b on a.学号=b.学号 where a.成绩>=60 and b.成绩>=60),1) *
isnull((select 0 from inserted a inner join deleted b on a.学号=b.学号 where a.成绩<60 and b.成绩<60),1) *
isnull((select -1 from inserted a inner join deleted b on a.学号=b.学号 where a.成绩<60 and b.成绩>=60),1) from 学生信息 a inner join inserted b on a.学号=b.学号
go
-晴天 2008-07-09
  • 打赏
  • 举报
回复
create trigger 增加学分 on 学生成绩
after insert
as
update 学生信息 set 学分=学分+(select 学分 from 课程信息表 a inner join inserted b on a.课程名称=b.课程名称) from 学生信息 a inner join inserted b on a.学号=b.学号 where b.成绩>=60
go

create trigger 降低学分 on 学生成绩
after delete
as
update 学生信息 set 学分=学分-(select 学分 from 课程信息表 a inner join deleted b on a.课程名称=b.课程名称) from 学生信息 a inner join inserted b on 学号=b.学号 where b.成绩>=60
go

create trigger 更改学分 on 学生成绩
after update
as
if exists(select 1 from inserted a inner join deleted b on a.学号=b.学号 where a.成绩>=60 and b.成绩<60)
update 学生信息 set 学分=学分+(select 学分 from 课程信息表 a inner join deleted b on a.课程名称=b.课程名称) *
isnull((select 1 from inserted a inner join deleted b on a.学号=b.学号 where a.成绩>=60 and b.成绩<60),1) *
isnull((select 0 from inserted a inner join deleted b on a.学号=b.学号 where a.成绩>=60 and b.成绩>=60),1) *
isnull((select 0 from inserted a inner join deleted b on a.学号=b.学号 where a.成绩<60 and b.成绩<60),1) *
isnull((select -1 from inserted a inner join deleted b on a.学号=b.学号 where a.成绩<60 and b.成绩>=60),1) from 学生信息 a inner join inserted b on a.学号=b.学号
go
-晴天 2008-07-09
  • 打赏
  • 举报
回复
create trigger 增加学分 on 学生成绩
after insert
as
update 学生信息 set 学分=学分+(select 学分 from 课程信息表 a inner join inserted b on a.课程名称=b.课程名称) from 学生信息 a inner join inserted b on a.学号=b.学号 where b.成绩>=60
go

create trigger 降低学分 on 学生成绩
after delete
as
update 学生信息 set 学分=学分-(select 学分 from 课程信息表 a inner join deleted b on a.课程名称=b.课程名称) from 学生信息 a inner join inserted b on 学号=b.学号 where b.成绩>=60
go

create trigger 更改学分 on 学生成绩
after update
as
if exists(select 1 from inserted a inner join deleted b on a.学号=b.学号 where a.成绩>=60 and b.成绩<60)
update 学生信息 set 学分=学分+(select 学分 from 课程信息表 a inner join deleted b on a.课程名称=b.课程名称) *
isnull((select 1 from inserted a inner join deleted b on a.学号=b.学号 where a.成绩>=60 and b.成绩<60),1) *
isnull((select 0 from inserted a inner join deleted b on a.学号=b.学号 where a.成绩>=60 and b.成绩>=60),1) *
isnull((select 0 from inserted a inner join deleted b on a.学号=b.学号 where a.成绩<60 and b.成绩<60),1) *
isnull((select -1 from inserted a inner join deleted b on a.学号=b.学号 where a.成绩<60 and b.成绩>=60),1) from 学生信息 a inner join inserted b on a.学号=b.学号
go

pgy8288 2008-07-09
  • 打赏
  • 举报
回复
把应该是程序中完成的工作混淆到数据库模块了吧。
数据库只能实现在完成了输入成绩这个逻辑后,计算出学分这样的逻辑。
类似的业务逻辑应该是:

SELECT CASE WHEN 成绩 >= 60 THEN 2 ELSE 0 END AS 学分, 学生姓名
FROM 成绩表
zhouhan0048 2008-07-09
  • 打赏
  • 举报
回复
就是当输入成绩的时候他会自动弹出学分
用存储过程
60分以上是2分
以下是0分..
大概这样
arrow_gx 2008-07-09
  • 打赏
  • 举报
回复
结构? 数据 ? 学分计算公式 ??

34,873

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧