我想统计下面表个等级的个数,能否用一条SQL来是来实现统计能,请各位大哥们帮帮忙,小弟万分感谢!表名 test      考试名称                         班级              姓名       学科   等级
      
2006级期末考                   2008级02班         谢安頔     数学    A+                  
2006级期末考                   2008级02班       蒋奕婕      数学    A+                  
2006级期末考                   2008级02班        杨昕        数学    A+                  
2006级期末考                   2008级02班          高铭明      数学    B+                  
2006级期末考                   2008级02班          薛锦明      数学    B+   
    2006级期末考                   2008级03班          王甫泽荣    数学    B+                  
2006级期末考                   2008级02班          吴夏安      数学    B+                  
2006级期末考                   2008级02班          梁忠财      数学    C+                  
2006级期末考                   2008级02班        廖艳萍      数学    C+                  
2006级期末考                   2008级03班          肖聪        数学    C+    

能否把上面的表用一条sql统计成下面这个表呢?麻烦各位了


 考试名称          班级     学科  A+  B+  C+
 
   2006级期末考    2008级02班   数学  3   3   2
   2006级期末考    2008级03班   数学  0   1   1
   

解决方案 »

  1.   


    select 考试名称,班级,姓名,学科,''A+''=sum(case when 等级=''A+'' then 1 else 0 end),''B+''=sum(case when 等级=''B+'' then 1 else 0 end),''C+''=sum(case when 等级=''C+'' then 1 else 0 end) FROM test 
    没测试过
      

  2.   


    --try it
    select distinct 考试名称,班级 , 学科,count(case when 等级='A+' then 1 else null end case ) as  A+,
    count(case when 等级='B+' then 1 else null end case ) as  B+,
    count(case when 等级='C+' then 1 else null end case ) as  C+,
    from test group by 考试名称,班级 , 学科 
      

  3.   


    --try it
    select  考试名称,班级 , 学科,count(case when 等级='A+' then 1 else null end case ) as  A+,
    count(case when 等级='B+' then 1 else null end case ) as  B+,
    count(case when 等级='C+' then 1 else null end case ) as  C+,
    from test group by 考试名称,班级 , 学科 
      

  4.   

    select distinct 考试名称, 班级 , 学科,sum(case when 等级='A+' then 1 else 0 end) as  A+,
    sum(case when 等级='B+' then 1 else 0 end) as  B+,
    sum(case when 等级='C+' then 1 else 0 end) as  C+,
    from test group by 考试名称, 班级 , 学科 测试通过
      

  5.   


    //等级如果是不固定的,需要动态生成!
    drop table test
    create table test(A1 varchar(20),A2 varchar(20),A3 varchar(20),A4 varchar(20),A5 varchar(20),A6 varchar(20)) 
    insert into test select '2006级期末考','01班','20080101','张三','语文','A+' 
    insert into test select '2006级期末考','01班','20080202','李四','语文','B+' 
    insert into test select '2006级期末考','01班','20080303','王五','语文','C' 
    insert into test select '2006级期末考','01班','20080101','张三','数学','C' 
    insert into test select '2006级期末考','01班','20080202','李四','数学','D' 
    insert into test select '2006级期末考','01班','20080303','王五','数学','C' 
    insert into test select '2006级期末考','01班','20080101','张三','政治','E' 
    insert into test select '2006级期末考','01班','20080202','李四','政治','A+' 
    insert into test select '2006级期末考','01班','20080303','王五','政治','B' 
    insert into test select '2006级期末考','01班','20080101','张三','英语','C' 
    insert into test select '2006级期末考','01班','20080202','李四','英语','A+' 
    insert into test select '2006级期末考','01班','20080303','王五','英语','B' 
    go 
    --测试 declare @sql varchar(8000) 
    set @sql='select A1,A2,A5 ' 
    select @sql=@sql+',sum(case when A6='''+A6+''' then 1 else '''' end)['+A6+']' from 
    (select distinct A6 from test)a 
    set @sql=@sql+' from test group by A1,A2,A5  order by A1,A2,A5' exec(@sql)