--建库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   

解决方案 »

  1.   

    又是行转列。见:http://topic.csdn.net/u/20080614/17/22e73f33-f071-46dc-b9bf-321204b1656f.html连表后转即可。
      

  2.   

    CREATE TABLE S  --学员信息表 
    (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 行)
    */
      

  3.   

    CREATE TABLE S  --学员信息表 
    (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
      

  4.   


    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
      

  5.   


    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
      

  6.   

    谢谢大家了!!!!!    
    我这样做不知道可以不?????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)
      

  7.   

    谢谢大家了!!!!!    
    我这样做不知道可以不?????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)