sql分组查询记录的问题

来源:百度知道 编辑:UC知道 时间:2024/05/26 02:59:14
我需要查询出所有学员的成绩信息,如下图
姓名 语文 数学 英语 历史
张萨 78 67 89 76
王强 89 67 84 96
李三 70 87 92 56
李四 80 78 97 66

但是不会写语句,请各位大大帮帮忙,谢谢。建表数据在下面

--建数据表--
USE Student
GO
CREATE TABLE Member --学生表
(
MID char(10) primary key, --学生号
MName CHAR(50) NOT NULL --姓名
)
GO
CREATE TABLE F --课程表
(
FID char(10) primary key, --课程号
FName CHAR(50) NOT NULL --课程名
)
GO
CREATE TABLE score --学生成绩表
(
SID int identity(1,1) primary key, --成绩记录号
FID char(10) foreign key(FID) references F(FID) , --课程号
MID char(10) foreign key(MID) references Member(MID) , --学生号
Score int NOT NULL --成绩
)
GO
--课程表中插入数据--
INSERT INTO F(FID,FName)VALUES('F001','语文')
INSERT INTO F(FID,FName)VALUES('F002','数学')
INSERT INTO F(FID,FName)VALUES('F003','英语')
INSERT INTO F(FID,FName)

得用交叉表
方便起见,先建个视图
create view ScoreView as
select MName as 姓名,FName as 课程,Score as 分数 from
member join score on member.mid= score.mid
join f on f.fid=score.fid
go

--用动态交叉表查询
declare @sql varchar(8000)
set @sql='select 姓名=convert(varchar(10),姓名,120)'
select @sql=@sql+',['+课程
+']=sum(case 课程 when '''+课程+''' then 分数 else 0 end)'
from(select distinct 课程 from ScoreView) a
exec(@sql+' from ScoreView group by convert(varchar(10),姓名,120)')

select MName,Score from Member,score where Member.MID=score.MID