作业帮 > 综合 > 作业

请帮我写个SQL SERVER的语句,显示:姓名 英语 格式不知道怎么写,请看补充:

来源:学生作业帮 编辑:拍题作业网作业帮 分类:综合作业 时间:2024/04/19 19:23:50
请帮我写个SQL SERVER的语句,显示:姓名 英语 格式不知道怎么写,请看补充:
所要查询的问题:
查询各个学生语文、数学、英语、历史课程成绩,例如下表:
姓名\x05语文\x05数学\x05英语\x05历史
张萨\x0578 \x0567\x0589\x0576
王强 \x0589 \x0567 \x0584 \x0596
李三\x0570 \x0587 \x0592 \x0556
李四 \x0580\x0578 \x0597\x0566
这是最后要显示的格式,我就是不知道就格式应该怎么写,我是这样做的:先建一个总的视图,把所有的列表示出来,然后,再分别为语言,英语,历史建立四个视图,这样一来通过:
select yuwen.学生姓名,yuwen.成绩as shuxue.成绩AS yingwu.成绩AS 英语成绩,lishi.成绩AS
from yuwen
inner join shuxue
on yuwen.学生姓名=shuxue.学生姓名
inner join yingwu
on yuwen.学生姓名=yingwu.学生姓名
inner join lishi
on lishi.学生姓名=yuwen.学生姓名
就可以显示上面所示的视图了,但这样好麻烦,也不实用,请问,你有更好的的法子吗,该怎么写语句?
下面是建表和视力的语句:
--学生表
CREATE TABLE member(
mid char(10) primary key,
mname char(50) not null,
);
--课程表
CREATE TABLE course(
fid char(10) primary key,
fname char(50) not null,
);
--成绩表
select * from score
CREATE TABLE score(
scid int identity(1,1) primary key,
fid char(10) foreign key(fid) references course(fid),
mid char(10) foreign key(mid) references member(mid),
sconum int,
);
--课程表中插入数据--
insert into course
values('F001',
insert into course
values('F002',
insert into course
values('F003','英语')
insert into course
values('F004',
--学生表中插入数据--
select * from member
insert into member
values('M001','张萨')
insert into member
values('M002','王强')
insert into member
values('M003','李三')
insert into member
values('M004','李四')
insert into member
values('M005','阳阳')
insert into member
values('M006','虎子')
insert into member
values('M007','夏雪')
insert into member
values('M008','璐璐')
insert into member
values('M009','珊珊')
insert into member
values('M010','香奈儿')
--成绩表中插入数据--
SELECT * FROM score
order by scid,fid
INSERT INTO score
values('F004','M009',79)
INSERT INTO score
values('F001','M001',78)
INSERT INTO score
values('F002','M001',67)
INSERT INTO score
values('F003','M001',89)
INSERT INTO score
values('F004','M001',76)
INSERT INTO score
values('F001','M002',89)
INSERT INTO score
values('F001','M002',67)
INSERT INTO score
values('F003','M002',84)
INSERT INTO score
values('F004','M002',96)
INSERT INTO score
values('F001','M003',70)
INSERT INTO score
values('F002','M003',87)
INSERT INTO score
values('F003','M003',92)
INSERT INTO score
values('F004','M003',56)
INSERT INTO score
values('F001','M004',80)
--先创建一个总的视图
drop view vw2
CREATE VIEW VW2(学生号,学生姓名,课程号,课程名,成绩编号,成绩)
AS
select m.mid,m.mname,c.fid,c.fname,s.scid,s.sconum
from member m
inner join score s
on m.mid=s.mid
inner join course c
on c.fid=s.fid
再创建各科视图
create view yuwen
AS
select 学生姓名,成绩
FROM vw2
where 课程名='语文'
select m.mname 学生姓名,s1.sconum s2.sconum s3.sconum 英语,s4.sconum from member m
\x05left outer join score s1 on m.mid = s1.mid and s1.fid='F001'
\x05left outer join score s2 on m.mid = s2.mid and s2.fid='F002'
\x05left outer join score s3 on m.mid = s3.mid and s3.fid='F003'
\x05left outer join score s4 on m.mid = s4.mid and s4.fid='F004'
用这个自连接也可以实现问题,但这样做有哪些不好的地方,比效率等……
declare @sql varchar(8000)set @sql = 'select mname as ' + '姓名'select @sql = @sql + ' , max(case fname when ''' + fname + ''' then sconum else 0 end) [' + fname + ']'from (select distinct fname from course) as aset @sql = @sql + ' from score s, member m,course c where s.mid = m.mid and c.fid = s.fid group by m.mname'exec(@sql)
再问: 有些看不懂这个,能说明一下吗,谢谢。
再答: 1、定义一个拼接sql 的变量 2、拼接查询语句,所用的条件都是拼成的,除了部分值 3、执行sql语句,得到结果、
再问: ''' -这三个是什么意思,不像要用到三个分开的'的符号吗,是特定的意义吗?
再答: 就是拼接一个所要执行的sql字符串,当然要用 ' 分割啦。