sql三表联查问题
- 培训职业
- 2025-05-06 03:46:06
这是我以前给他们做的,和你这个除了表名和字段不一样以外,其他的都一样,你仿照着改改吧:
/*学生表: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)
上一篇
承包商投标报价论文
多重随机标签