select 
       班级,
       优=sum(case when 成绩='优' then 1 else 0 end),
       良=sum(case when 成绩='良' then 1 else 0 end),
       中=sum(case when 成绩='中' then 1 else 0 end),
       差=sum(case when 成绩='差' then 1 else 0 end)
from 
  学生表A
group by 
  班级

解决方案 »

  1.   

    select 班级,
    sum(case when 成绩='优' then 1 else 0 end) as 优,
    sum(case when 成绩='良' then 1 else 0 end) as 良,
    sum(case when 成绩='中' then 1 else 0 end) as 中,
    sum(case when 成绩='差' then 1 else 0 end) as 差
    from 表A
    group by 班级
      

  2.   

    declare @s varchar(4000)
    set @s='select 班级'
    select @s=@s+',['+成绩+']=sum(case when 成绩='''+成绩+''' then 1 else 0 end)' 
    from 学生表 group by 成绩
    set @s=@s+' from 学生表 group by 班级'
    exec(@s)
      

  3.   

    --动态SQL
    declare @s varchar(2000)
    set @s='select 班级'
    select @s=@s+',['+成绩+']=sum(case when 成绩='''+成绩+''' then 1 else 0 end)'
    from 
       学生表A
    group by 
       成绩
    set @s=@s+' from 学生表 group by 班级'
    exec(@s)