我想统计下面表个等级的个数,能否用一条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
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
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
没测试过
--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 考试名称,班级 , 学科
--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 考试名称,班级 , 学科
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 考试名称, 班级 , 学科 测试通过
//等级如果是不固定的,需要动态生成!
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)