--如果课程名只有语文,数学,用:select 学号
  ,语文成绩=max(case 课程名 when '''语文''' then 成绩 else 0 end)
  ,数学成绩=max(case 课程名 when '''数学''' then 成绩 else 0 end)
from 表 group by 学号.

解决方案 »

  1.   

    --上面的多加了一点,改一下:
    select 学号
      ,语文成绩=max(case 课程名 when '''语文''' then 成绩 else 0 end)
      ,数学成绩=max(case 课程名 when '''数学''' then 成绩 else 0 end)
    from 表 group by 学号
      

  2.   

    --还是错了,上面的又多了.真是忘事.动态的方法写多了,再改:
    select 学号
      ,语文成绩=max(case 课程名 when '语文' then 成绩 else 0 end)
      ,数学成绩=max(case 课程名 when '数学' then 成绩 else 0 end)
    from 表 group by 学号
    --如果课程名是动态的,不确实的,就用:declare @s varchar(8000)
    set @s=''
    select @s=@s+',['+课程名+']=case 课程名 when '''+课程名+''' then 成绩 else 0 end)'
    from(select distinct 课程名 from 表) a
    exec('select 学号'+@s+'from 表 group by 学号')
      

  3.   

    exec('select 学号'+@s+' from 表 group by 学号')