sql 2000 查询语句问题

来源:百度知道 编辑:UC知道 时间:2024/06/05 17:11:28
已经有三张表

表一:student <学生表表名>

字段名称 数据类型 说明
-----------------------------------------
MID Char(10) 学生号,主键
MName Char(50) 姓名

表二:f <成绩表表名>

字段名称 数据类型 说明
---------------------------------------------
FID Char(10) 课程,主键
FName Char(50) 课程名

表三:score <成绩表表名>

字段名称 数据类型 说明
----------------------------------------------------------
SID int 自动编号,主键,成绩记录号
FID Char(10) 课程号, 外键
MID Char(10) 学生号, 外键
Score int 成绩

都已经有数据了,想要得出以下结果该如何写slq语句??????

姓名 语文 数学 英语 历史
------------------------------------------
张萨 78 67 89 76
王强 89 67 84 96
李三 70 87 92 56
李四 80 78 97 66

已经有的表和数据的sql语句如下(有sql的帮忙测试一下能否达到效果),昨天有人给的答案我试了,不行)
到以下地址复制,这里写不下了

看错了,修改如下:
declare @fname char(50),@fid char(10),@tempstr nvarchar(1000),@tempstr2 nvarchar(1000),@i int
set @tempstr='select student.mname as 姓名'
set @tempstr2=' from [student]'
set @i=65
declare frecord cursor for select fid,fname from f
open frecord
fetch next from frecord into @fid,@fname
while(@@fetch_status=0)
begin
set @tempstr=@tempstr+','+char(@i)+'.score as '+@fname
set @tempstr2=@tempstr2+' left join [score] as '+char(@i)+' on '+char(@i)+'.mid=student.mid and '+char(@i)+'.fid='''+@fid+''''
fetch next from frecord into @fid,@fname
set @i=@i+1
end
set @tempstr=@tempstr+@tempstr2
close frecord
deallocate frecord
exec(@tempstr)

假如 知道课程表里 FID 每个值对应的课程名,如fid='yuwen'就表示语文课程,其余类推。 那么可以直接用下面的查询。
select (select mname from student where mid=s.mid) as sname,
(select s.score f