学生成绩信息三个表,结构如下:
学生表:Member
字段名称 数据类型 说明
MID Char(10) 学生号,主键
MName Char(50) 姓名
课程表:
字段名称 数据类型 说明
FID Char(10) 课程,主键
FName Char(50) 课程名
成绩表:Score
字段名称 数据类型 说明
SID int 自动编号,主键,成绩记录号
FID Char(10) 课程号,外键
MID Char(10) 学生号,外键
Score int 成绩
请编写T-SQL语句来实现如下功能:
1) 查询各个学生语文、数学、英语、历史课程成绩,例如下表:
姓名 语文 数学 英语 历史
张萨 78 67 89 76
王强 89 67 84 96
李三 70 87 92 56
李四 80 78 97 66
2) 查询四门课中成绩低于70分的学生及相对应课程名和成绩。
3) 统计各个学生参加考试课程的平均分,且按平均分数由高到底排序。
4) 创建存储过程,分别查询参加1、2、3、4门考试及没有参加考试的学生名单,要求显示姓名、学号。
------解决方案--------------------
select Mname as 姓名,语文,数学,英语,历史 from Member a join
(select MID,sum(语文) as 语文,sum(数学) as 数学,sum(英语) as 英语,sum(历史) as 历史 from
(select MID,case FName when '语文' then Score else 0 end as 语文,
case FName when '数学' then Score else 0 end as 数学,
case FName when '英语' then Score else 0 end as 英语,
case FName when '历史' then Score else 0 end as 历史
from (select MID ,FName,Score from score a join 课程表 b on a.FID=b.FID) tb_score
) total group by MID
) tb_all b on a.MID=b.MID