参考:
 select 姓名
  ,sum(case when 学期='第一学期' and 课程='物理' and 考试类型='期中' then 成绩 end) 第一学期期中物理 
  ,sum(case when 学期='第一学期' and 课程='化学' and 考试类型='期中' then 成绩 end) 第一学期期中化学
....
  ,sum(case when 学期='第二学期' and 课程='物理' and 考试类型='期中' then 成绩 end) 第二学期期中物理  
.....
  ,sum(case when 学期='第一学期' and 课程='物理' and 考试类型='会考' then 成绩 end) 第一学期会考物理 
....
from 成绩总表 group by 姓名

解决方案 »

  1.   

    1:
    Select (case when 课程 = '物理' then 成绩 else 0 end) as 物理,
           (case when 课程 = '化学' then 成绩 else 0 end) as 化学,
           学期,考试日期
    where 考试类型 = '期中'
    group by 学期,考试日期
    2:
    Select (case when 课程 = '物理' then 成绩 else 0 end) as 物理,
           (case when 课程 = '化学' then 成绩 else 0 end) as 化学,
           学期,考试日期
    where 考试类型 = '期末'
    group by 学期,考试日期
    3:
    Select (case when 课程 = '物理' then 成绩 else 0 end) as 物理,
           (case when 课程 = '化学' then 成绩 else 0 end) as 化学,
           学期,考试日期
    where 考试类型 = '会考'
    group by 学期,考试日期
    or
    select * from (
    Select (case when 课程 = '物理' then 成绩 else 0 end) as 物理,
           (case when 课程 = '化学' then 成绩 else 0 end) as 化学,
           学期,考试日期
    where 考试类型 = '期中'
    group by 学期,考试日期
    union all
    Select (case when 课程 = '物理' then 成绩 else 0 end) as 物理,
           (case when 课程 = '化学' then 成绩 else 0 end) as 化学,
           学期,考试日期
    where 考试类型 = '期末'
    group by 学期,考试日期
    union all
    Select (case when 课程 = '物理' then 成绩 else 0 end) as 物理,
           (case when 课程 = '化学' then 成绩 else 0 end) as 化学,
           学期,考试日期
    where 考试类型 = '会考'
    group by 学期,考试日期
    ) temp
    order by 考试类型
      

  2.   

    select '成绩','课程','学期','考试日期' from 成绩总 where 考试类型=期中 and 学号=? 
    group by '学期','考试日期','课程'就能到这个程度了吧