--建库USE master
GO
IF exists(SELECT * FROM sysdatabases WHERE name='STU')
DROP DATABASE STU
GO
CREATE DATABASE STU
GO
--建表USE STU
GO
CREATE TABLE S --学员信息表
(SID CHAR(8) NOT NULL, --学号
SN CHAR(10) NOT NULL , --姓名
SD CHAR(10) NOT NULL, --所属单位
SA CHAR(10) NOT NULL --年龄)
GO
CREATE TABLE C --课程表
(CID CHAR(10) NOT NULL, --课程编号
CN CHAR(20) NOT NULL --课程名称)
GO
CREATE TABLE SC --成绩表
(CID CHAR(10) NOT NULL, --课程编号
SID CHAR(10) NOT NULL, --学号
G CHAR(10) NOT NULL --成绩)
GO
--插入测试数据
INSERT INTO S(SID,SN,SD,SA)VALUES('1001','林林','中国汽车','28')
INSERT INTO S(SID,SN,SD,SA)VALUES('1002','白杨','北大青鸟','30')
INSERT INTO C(CID,CN)VALUES('s001','税收基础')
INSERT INTO C(CID,CN)VALUES('s002','初级韩语')
INSERT INTO C(CID,CN)VALUES('s003','雅思英语')
INSERT INTO SC(CID,SID,G)VALUES('s001','1001','85')
INSERT INTO SC(CID,SID,G)VALUES('s002','1001','76')
INSERT INTO SC(CID,SID,G)VALUES('s003','1002','90')
如何用 相关查询 得到这个结果集?????
姓名 税收基础 初级韩语 雅思英语林林 89 80 81白杨 50 60 80
GO
IF exists(SELECT * FROM sysdatabases WHERE name='STU')
DROP DATABASE STU
GO
CREATE DATABASE STU
GO
--建表USE STU
GO
CREATE TABLE S --学员信息表
(SID CHAR(8) NOT NULL, --学号
SN CHAR(10) NOT NULL , --姓名
SD CHAR(10) NOT NULL, --所属单位
SA CHAR(10) NOT NULL --年龄)
GO
CREATE TABLE C --课程表
(CID CHAR(10) NOT NULL, --课程编号
CN CHAR(20) NOT NULL --课程名称)
GO
CREATE TABLE SC --成绩表
(CID CHAR(10) NOT NULL, --课程编号
SID CHAR(10) NOT NULL, --学号
G CHAR(10) NOT NULL --成绩)
GO
--插入测试数据
INSERT INTO S(SID,SN,SD,SA)VALUES('1001','林林','中国汽车','28')
INSERT INTO S(SID,SN,SD,SA)VALUES('1002','白杨','北大青鸟','30')
INSERT INTO C(CID,CN)VALUES('s001','税收基础')
INSERT INTO C(CID,CN)VALUES('s002','初级韩语')
INSERT INTO C(CID,CN)VALUES('s003','雅思英语')
INSERT INTO SC(CID,SID,G)VALUES('s001','1001','85')
INSERT INTO SC(CID,SID,G)VALUES('s002','1001','76')
INSERT INTO SC(CID,SID,G)VALUES('s003','1002','90')
如何用 相关查询 得到这个结果集?????
姓名 税收基础 初级韩语 雅思英语林林 89 80 81白杨 50 60 80
(SID CHAR(8) , --学号
SN CHAR(10), --姓名
SD CHAR(10), --所属单位
SA CHAR(10))
GO
CREATE TABLE C --课程表
(CID CHAR(10) , --课程编号
CN CHAR(20))
GO
CREATE TABLE SC --成绩表
(CID CHAR(10) , --课程编号
SID CHAR(10) , --学号
G CHAR(10))
GO
--插入测试数据
INSERT INTO S(SID,SN,SD,SA)VALUES('1001','林林','中国汽车','28')
INSERT INTO S(SID,SN,SD,SA)VALUES('1002','白杨','北大青鸟','30')
INSERT INTO C(CID,CN)VALUES('s001','税收基础')
INSERT INTO C(CID,CN)VALUES('s002','初级韩语')
INSERT INTO C(CID,CN)VALUES('s003','雅思英语')
INSERT INTO SC(CID,SID,G)VALUES('s001','1001','85')
INSERT INTO SC(CID,SID,G)VALUES('s002','1001','76')
INSERT INTO SC(CID,SID,G)VALUES('s003','1002','90')
go--sql 静态
select s.sid ,
max(case c.cn when '税收基础' then sc.g else 0 end) 税收基础 ,
max(case c.cn when '初级韩语' then sc.g else 0 end) 初级韩语 ,
max(case c.cn when '雅思英语' then sc.g else 0 end) 雅思英语
from s, c , sc
where s.sid = sc.sid and sc.cid = c.cid
group by s.sid
drop table s,c,sc/*
sid 税收基础 初级韩语 雅思英语
-------- ----------- ----------- -----------
1001 85 76 0
1002 0 0 90(所影响的行数为 2 行)
*/
(SID CHAR(8) , --学号
SN CHAR(10), --姓名
SD CHAR(10), --所属单位
SA CHAR(10))
GO
CREATE TABLE C --课程表
(CID CHAR(10) , --课程编号
CN CHAR(20))
GO
CREATE TABLE SC --成绩表
(CID CHAR(10) , --课程编号
SID CHAR(10) , --学号
G CHAR(10))
GO
--插入测试数据
INSERT INTO S(SID,SN,SD,SA)VALUES('1001','林林','中国汽车','28')
INSERT INTO S(SID,SN,SD,SA)VALUES('1002','白杨','北大青鸟','30')
INSERT INTO C(CID,CN)VALUES('s001','税收基础')
INSERT INTO C(CID,CN)VALUES('s002','初级韩语')
INSERT INTO C(CID,CN)VALUES('s003','雅思英语')
INSERT INTO SC(CID,SID,G)VALUES('s001','1001','85')
INSERT INTO SC(CID,SID,G)VALUES('s002','1001','76')
INSERT INTO SC(CID,SID,G)VALUES('s003','1002','90')
go--sql 静态,指C表的CN名称固定为税收基础,初级韩语,雅思英语三种。
select s.sid ,
max(case c.cn when '税收基础' then sc.g else 0 end) 税收基础 ,
max(case c.cn when '初级韩语' then sc.g else 0 end) 初级韩语 ,
max(case c.cn when '雅思英语' then sc.g else 0 end) 雅思英语
from s, c , sc
where s.sid = sc.sid and sc.cid = c.cid
group by s.sid
/*
sid 税收基础 初级韩语 雅思英语
-------- ----------- ----------- -----------
1001 85 76 0
1002 0 0 90
*/--sql 动态,指C表的CN名称不固定。
declare @sql varchar(8000)
set @sql = 'select s.sid '
select @sql = @sql + ' , max(case c.cn when ''' + cn + ''' then sc.g else 0 end) [' + cn + ']'
from (select distinct cn from c) as a
set @sql = @sql + ' from s, c , sc where s.sid = sc.sid and sc.cid = c.cid group by s.sid'
exec(@sql)
/*
sid 初级韩语 税收基础 雅思英语
-------- ---------------- ---------------- ----------------
1001 76 85 0
1002 0 0 90
*/
drop table s,c,sc
drop function s
drop table C
drop TABLE SC
CREATE TABLE S --学员信息表
(SID CHAR(8) NOT NULL, --学号
SN CHAR(10) NOT NULL , --姓名
SD CHAR(10) NOT NULL, --所属单位
SA CHAR(10) NOT NULL ) --年龄
GO
CREATE TABLE C --课程表
(CID CHAR(10) NOT NULL, --课程编号
CN CHAR(20) NOT NULL ) --课程名称
GO
CREATE TABLE SC --成绩表
(CID CHAR(10) NOT NULL, --课程编号
SID CHAR(10) NOT NULL, --学号
G CHAR(10) NOT NULL ) --成绩
GO
--插入测试数据
INSERT INTO S(SID,SN,SD,SA)VALUES('1001','林林','中国汽车','28')
INSERT INTO S(SID,SN,SD,SA)VALUES('1002','白杨','北大青鸟','30')
INSERT INTO C(CID,CN)VALUES('s001','税收基础')
INSERT INTO C(CID,CN)VALUES('s002','初级韩语')
INSERT INTO C(CID,CN)VALUES('s003','雅思英语')
INSERT INTO SC(CID,SID,G)VALUES('s001','1001','85')
INSERT INTO SC(CID,SID,G)VALUES('s002','1001','76')
INSERT INTO SC(CID,SID,G)VALUES('s003','1002','90')
---SELECT * FROM S
---SELECT * FROM C
---SELECT * FROM SC
------------------------
select s.sn,税收基础=max(case when b.cid='s001' then G else 0 end),
初级韩语=max(case when b.cid='s002' then G else 0 end),
雅思英语=max(case when b.cid='s003' then G else 0 end)
from c a join sc b on a.cid=b.cid join S on b.sid=s.sid
group by s.snjoin s
on b.sid=s.sid
group by s.sn
CREATE TABLE S --学员信息表
(SID CHAR(8) NOT NULL, --学号
SN CHAR(10) NOT NULL , --姓名
SD CHAR(10) NOT NULL, --所属单位
SA CHAR(10) NOT NULL ) --年龄
GO
CREATE TABLE C --课程表
(CID CHAR(10) NOT NULL, --课程编号
CN CHAR(20) NOT NULL ) --课程名称
GO
CREATE TABLE SC --成绩表
(CID CHAR(10) NOT NULL, --课程编号
SID CHAR(10) NOT NULL, --学号
G CHAR(10) NOT NULL ) --成绩
GO
--插入测试数据
INSERT INTO S(SID,SN,SD,SA)VALUES('1001','林林','中国汽车','28')
INSERT INTO S(SID,SN,SD,SA)VALUES('1002','白杨','北大青鸟','30')
INSERT INTO C(CID,CN)VALUES('s001','税收基础')
INSERT INTO C(CID,CN)VALUES('s002','初级韩语')
INSERT INTO C(CID,CN)VALUES('s003','雅思英语')
INSERT INTO SC(CID,SID,G)VALUES('s001','1001','85')
INSERT INTO SC(CID,SID,G)VALUES('s002','1001','76')
INSERT INTO SC(CID,SID,G)VALUES('s003','1002','90')
---SELECT * FROM S
---SELECT * FROM C
---SELECT * FROM SC
------------------------
select s.sn,税收基础=max(case when b.cid='s001' then G else 0 end),
初级韩语=max(case when b.cid='s002' then G else 0 end),
雅思英语=max(case when b.cid='s003' then G else 0 end)
from c a join sc b on a.cid=b.cid join S on b.sid=s.sid
group by s.sn
我这样做不知道可以不?????select '姓名'=mname,
'语文'=(select Score from score where score.mid=Member.mid and fid='F001'),
'数学'=(select Score from score where score.mid=Member.mid and fid='F002'),
'英语'=(select Score from score where score.mid=Member.mid and fid='F003'),
'历史'=(select Score from score where score.mid=Member.mid and fid='F004')
from Member where mid in (select mid from score)
我这样做不知道可以不?????select '姓名'=mname,
'语文'=(select Score from score where score.mid=Member.mid and fid='F001'),
'数学'=(select Score from score where score.mid=Member.mid and fid='F002'),
'英语'=(select Score from score where score.mid=Member.mid and fid='F003'),
'历史'=(select Score from score where score.mid=Member.mid and fid='F004')
from Member where mid in (select mid from score)