select 学号,sum(case 课程 when '数学' then 成绩 else 0 end) as '数学',          sum(case 课程 when '英语' then 成绩 else 0 end) as '英语',            sum(case 课程 when '语文' then 成绩 else 0 end) as '语文',sum(成绩) 总分,avg(成绩) 平均分,max(时间) 时间from  成绩 
group by 学号

解决方案 »

  1.   

    谢谢pengdali(大力 V3.0) 果然是高手.
    现在还想问一个问题,如何在前面加一个"名次"列呀!!
     名次  学号     姓名   数学   语文 英语 .....总分  平均分 时间
      1   20030101   王好   90     85    89       268     88   2003-09-01
       2   20030102   李国   85     95    96       275     90   2003-09-01
    答完就结,先谢谢了
      

  2.   

    select (select count(*)+1 from (select 1 from 成绩 group by 学号 having sum(成绩)<aaa.总分) tem) 名次,*from (
    select 学号,sum(case 课程 when '数学' then 成绩 else 0 end) as '数学',          sum(case 课程 when '英语' then 成绩 else 0 end) as '英语',            sum(case 课程 when '语文' then 成绩 else 0 end) as '语文',sum(成绩) 总分,avg(成绩) 平均分,max(时间) 时间
    from  成绩
    group by 学号) aaa
      

  3.   

    select 学号,sum(case 课程 when '数学' then 成绩 else 0 end) as '数学',          sum(case 课程 when '英语' then 成绩 else 0 end) as '英语',            sum(case 课程 when '语文' then 成绩 else 0 end) as '语文',sum(成绩) 总分,avg(成绩) 平均分,max(时间) 时间 into #临时表
    from  成绩
    group by 学号select (select count(*)+1 from #临时表 where 总分<tem.总分) 名次,* from #临时表 tem