当前位置:首页 > 培训职业 > 正文

sql三表联查问题

这是我以前给他们做的,和你这个除了表名和字段不一样以外,其他的都一样,你仿照着改改吧:

/*学生表:Member

字段名称 数据类型 说明

MID Char(10) 学生号,主键

MName Char(50) 姓名

课程表Class:

字段名称 数据类型 说明

FID Char(10) 课程,主键

FName Char(50) 课程名

成绩表:Score

字段名称 数据类型 说明

SID int 自动编号,主键,成绩记录号

FID Char(10) 课程号,外键

MID Char(10) 学生号,外键

Score int 成绩*/

create table member(mid varchar(10) primary key,mname varchar(50))

create table class(fid varchar(10) primary key,fname varchar(50))

create table score(sid int primary key,fid varchar(10),mid varchar(10),score int)

go

insert into member values ('1001','张三')

insert into member values ('1002','李四')

insert into class values ('A1','数学')

insert into class values ('A2','化学')

insert into class values ('A3','政治')

insert into class values ('A4','历史')

insert into class values ('A5','语文')

insert into class values ('A6','物理')

insert into score values (1,'A1','1001',80)

insert into score values (2,'A1','1002',85)

insert into score values (3,'A2','1001',84)

insert into score values (4,'A4','1002',90)

go

declare @sql varchar(8000)

select @sql='select a.mname as 学生姓名'

select @sql=@sql+',sum(case c.fname when '''+fname+''' then b.score else null end )as '+fname from class

select @sql=@sql+' from member a left join score b on a.mid=b.mid left join class c on b.fid=c.fid group by a.mname'

print @sql

exec (@sql)

多重随机标签

猜你喜欢文章