问题出自:http://community.csdn.net/Expert/topic/3495/3495537.xml?temp=.9028894
原来表内容:
姓名    年龄          班级         
----- ----------- ---------- 
张三    11          高一(2)
李四    12          高一(1)
王五    12          高一(2)
赵六    12          高一(2)
想得到的结果:
高一(1)       高一(2)       
----------- ----------- 
1           3
 --测试:
--测试: create table tb(姓名 varchar(5), 年龄 int , 班级 varchar(10))
create table tb(姓名 varchar(5), 年龄 int , 班级 varchar(10)) insert into tb
insert into tb select '张三',11,'高一(2)'union all
select '张三',11,'高一(2)'union all select '李四',12,'高一(1)' union all
select '李四',12,'高一(1)' union all select '王五',12,'高一(2)' union all
select '王五',12,'高一(2)' union all select '赵六',12,'高一(2)'
select '赵六',12,'高一(2)' 
 --原始数据
--原始数据 select * from tb
select * from tb
 --如果班级并不多,可以静态指出列的个数
--如果班级并不多,可以静态指出列的个数 select '高一(1)'=sum(case when 班级='高一(1)' then 1 else 0 end),
select '高一(1)'=sum(case when 班级='高一(1)' then 1 else 0 end), '高一(2)'=sum(case when 班级='高一(2)' then 1 else 0 end)
       '高一(2)'=sum(case when 班级='高一(2)' then 1 else 0 end) from tb
from tb
 --如果班级比较多,而且不知道班级名称,使用下面动态语句
--如果班级比较多,而且不知道班级名称,使用下面动态语句 declare @sql varchar(8000)
declare @sql varchar(8000) set @sql=''
set @sql='' select @sql=case when @sql='' then @sql+'sum(case 班级 when '''+班级+''' then 1 else 0 end) as ['+班级+']'
select @sql=case when @sql='' then @sql+'sum(case 班级 when '''+班级+''' then 1 else 0 end) as ['+班级+']'  else @sql+',sum(case 班级 when '''+班级+''' then 1 else 0 end) as ['+班级+']' end
else @sql+',sum(case 班级 when '''+班级+''' then 1 else 0 end) as ['+班级+']' end from tb
from tb group by 班级 order by 班级 asc
group by 班级 order by 班级 asc exec('select '+@sql+' from tb')
exec('select '+@sql+' from tb')
 --删除测试表
--删除测试表 drop table tb
drop table tb 
                    
                 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号