永发信息网

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

答案:1  悬赏:60  手机版
解决时间 2021-02-25 22:44
请帮我写个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字符串,当然要用 ' 分割啦。


我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
寺磨庄村怎么去啊,有知道地址的么
生化危机5游戏补丁怎么用
飞马小馄饨我想知道这个在什么地方
谁能告诉我结婚时可以用吉他弹奏的歌曲有那些
法人代表为了逃避债务宣布公司破产怎么办
女生能碰男生的哪些身体部位 内涵图
筋头巴脑董王庄金辉涮烤火锅地址在什么地方,
有甲、乙两袋大米,甲袋重48kg,从甲袋中取出
尊龙卫浴(连平县溪山镇卫生院西南)怎么去啊,
同周期的原子半径到稀有气体时剧增?
两个圆柱体对地面的压强相同,他们的密度分别
高通snapdragonQSD8250 和高通 骁龙Snapdrago
白庄怎么去啊,有知道地址的么
买了鞋子不到3天,去换 被要求只能换贵的 不能
java中如何把一个对象的多个属性,添加进去。
推荐资讯
大宝漆芜湖县专卖店怎么去啊,有知道地址的么
2013年 阳历6月9日阴历5月初2下午15点43分出
输入无线密码提示密钥长度无效怎么办
win7系统打开梦想世界3D时出现can create gl
大唐无双零玩的人多吗
饮食结构不合理可能引起维生素缺乏症如果某成
急需爱情表白诗句,前面六个字是“张丹丹我爱
求金华哪里有鬼屋
我180 纠结 国产h2 雪佛兰创酷 大众高尔夫低
善意的谎言阅读题答案
郑记麻辣烫在哪里啊,我有事要去这个地方
勿忘我代表什么意思
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?