执行完这段代码后USE master
GO
/*$$$$$$$$$$$$$建库$$$$$$$$$$$$$$$$$$$$$$$$*/
--检验数据库是否存在,如果为真,删除此数据库--
IF exists(SELECT * FROM sysdatabases WHERE name='Student')
  DROP DATABASE Student
GO
CREATE DATABASE Student
GO--建数据表--
USE Student
GO
CREATE TABLE Member  --学生表
(
  MID  char(10) primary key,  --学生号
  MName  CHAR(50) NOT NULL  --姓名
)
GO
CREATE TABLE F  --课程表
(
 FID   char(10) primary key,    --课程号
FName  CHAR(50) NOT NULL --课程名
)
GO
CREATE TABLE score  --学生成绩表
(
  SID int identity(1,1) primary key,  --成绩记录号
  FID char(10)  foreign key(FID) references F(FID) ,     --课程号
  MID char(10)  foreign key(MID) references Member(MID) ,     --学生号
  Score  int NOT NULL    --成绩
)
GO
--课程表中插入数据--
INSERT INTO F(FID,FName)VALUES('F001','语文')
INSERT INTO F(FID,FName)VALUES('F002','数学')
INSERT INTO F(FID,FName)VALUES('F003','英语')
INSERT INTO F(FID,FName)VALUES('F004','历史')
--学生表中插入数据--
INSERT INTO Member(MID,MName)VALUES('M001','张萨')
INSERT INTO Member(MID,MName)VALUES('M002','王强')
INSERT INTO Member(MID,MName)VALUES('M003','李三')
INSERT INTO Member(MID,MName)VALUES('M004','李四')
INSERT INTO Member(MID,MName)VALUES('M005','阳阳')
INSERT INTO Member(MID,MName)VALUES('M006','虎子')
INSERT INTO Member(MID,MName)VALUES('M007','夏雪')
INSERT INTO Member(MID,MName)VALUES('M008','璐璐')
INSERT INTO Member(MID,MName)VALUES('M009','珊珊')
INSERT INTO Member(MID,MName)VALUES('M010','香奈儿')
--成绩表中插入数据--
INSERT INTO Score(FID,MID,Score)VALUES('F001','M001',78)
INSERT INTO Score(FID,MID,Score)VALUES('F002','M001',67)
INSERT INTO Score(FID,MID,Score)VALUES('F003','M001',89)
INSERT INTO Score(FID,MID,Score)VALUES('F004','M001',76)
INSERT INTO Score(FID,MID,Score)VALUES('F001','M002',89)
INSERT INTO Score(FID,MID,Score)VALUES('F002','M002',67)
INSERT INTO Score(FID,MID,Score)VALUES('F003','M002',84)
INSERT INTO Score(FID,MID,Score)VALUES('F004','M002',96)
INSERT INTO Score(FID,MID,Score)VALUES('F001','M003',70)
INSERT INTO Score(FID,MID,Score)VALUES('F002','M003',87)
INSERT INTO Score(FID,MID,Score)VALUES('F003','M003',92)
INSERT INTO Score(FID,MID,Score)VALUES('F004','M003',56)
INSERT INTO Score(FID,MID,Score)VALUES('F001','M004',80)
INSERT INTO Score(FID,MID,Score)VALUES('F002','M004',78)
INSERT INTO Score(FID,MID,Score)VALUES('F003','M004',97)
INSERT INTO Score(FID,MID,Score)VALUES('F004','M004',66)
INSERT INTO Score(FID,MID,Score)VALUES('F001','M006',88)
INSERT INTO Score(FID,MID,Score)VALUES('F002','M006',55)
INSERT INTO Score(FID,MID,Score)VALUES('F003','M006',86)
INSERT INTO Score(FID,MID,Score)VALUES('F004','M006',79)
INSERT INTO Score(FID,MID,Score)VALUES('F002','M007',77)
INSERT INTO Score(FID,MID,Score)VALUES('F003','M008',65)
INSERT INTO Score(FID,MID,Score)VALUES('F004','M007',48)
INSERT INTO Score(FID,MID,Score)VALUES('F004','M009',75)
INSERT INTO Score(FID,MID,Score)VALUES('F002','M009',88)--完成如下查询1 查询各个学生课程成绩,例如下表:
         学生姓名 语文 数学 英语 历史
          ---       --  --   --   --2 创建存储过程,分别查询参加1、2、3、4门考试及没有参加考试的学生名单,要求显示姓名、学号。

解决方案 »

  1.   

    1.行列转换:
    select
      a.name,
      max(case b.FName when '语文' then c.Score else 0 end) as '语文',
      max(case b.FName when '数学' then c.Score else 0 end) as '数学',
      max(case b.FName when '英语' then c.Score else 0 end) as '英语',
      max(case b.FName when '历史' then c.Score else 0 end) as '历史'
    from 
      Member a,f b,score c
    where
      a.MID=c.MID
    and
      b.fid=c.fid
    group by
      a.name
      

  2.   

    2 创建存储过程,分别查询参加1、2、3、4门考试及没有参加考试的学生名单,要求显示姓名、学号。貌似我前两天写了一个一模一样的东西?
    create proc my_proc @cnt int
    as
    begin
      if @cnt > 0
         select m.mname , m.mid from member m , score n where m.mid = n.mid group by m.mname , m.mid having count(1) = @cnt
      else
         select m.mname , m.mid from member m where m.mid not in (select distinct mid from score)
    end
    goexec my_proc 1
    /*
    mname                                              mid        
    -------------------------------------------------- ---------- 
    璐璐                                                 M008      (所影响的行数为 1 行)
    */exec my_proc 2
    /*
    mname                                              mid        
    -------------------------------------------------- ---------- 
    夏雪                                                 M007      
    珊珊                                                 M009      (所影响的行数为 2 行)
    */exec my_proc 3
    /*
    mname                                              mid        
    -------------------------------------------------- ---------- (所影响的行数为 0 行)
    */exec my_proc 4
    /*
    mname                                              mid        
    -------------------------------------------------- ---------- 
    张萨                                                 M001      
    王强                                                 M002      
    李三                                                 M003      
    李四                                                 M004      
    虎子                                                 M006      (所影响的行数为 5 行)
    */exec my_proc 0
    /*
    mname                                              mid        
    -------------------------------------------------- ---------- 
    阳阳                                                 M005      
    香奈儿                                                M010      (所影响的行数为 2 行)
    */
      

  3.   

    还有一个问题就是---------------------------------
    警告: 聚合或其他 SET 操作消除了空值。(8 行受影响)
    ---------------------------------我想让那人全部值的也显示出来