<script language='javascript' src='http://www.shiqiaotou.com/donetk/Header.js'></script>
文章来源于 http://www.cnblogs.com/zhangzs8896 版权归原作者所有<script language='javascript' src='http://www.shiqiaotou.com/donetk/Footer.js'></script>
问题出自: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 ))
insert into tb
select ' 张三 ' , 11 , ' 高一(2) ' union all
select ' 李四 ' , 12 , ' 高一(1) ' union all
select ' 王五 ' , 12 , ' 高一(2) ' union all
select ' 赵六 ' , 12 , ' 高一(2) '
-- 原始数据
select * from tb
-- 如果班级并不多,可以静态指出列的个数
select ' 高一(1) ' = sum ( case when 班级 = ' 高一(1) ' then 1 else 0 end ),
' 高一(2) ' = sum ( case when 班级 = ' 高一(2) ' then 1 else 0 end )
from tb
-- 如果班级比较多,而且不知道班级名称,使用下面动态语句
declare @sql varchar ( 8000 )
set @sql = ''
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
from tb
group by 班级 order by 班级 asc
exec ( ' select ' + @sql + ' from tb ' )
-- 删除测试表
drop table tb
create table tb(姓名 varchar ( 5 ), 年龄 int , 班级 varchar ( 10 ))
insert into tb
select ' 张三 ' , 11 , ' 高一(2) ' union all
select ' 李四 ' , 12 , ' 高一(1) ' union all
select ' 王五 ' , 12 , ' 高一(2) ' union all
select ' 赵六 ' , 12 , ' 高一(2) '
-- 原始数据
select * from tb
-- 如果班级并不多,可以静态指出列的个数
select ' 高一(1) ' = sum ( case when 班级 = ' 高一(1) ' then 1 else 0 end ),
' 高一(2) ' = sum ( case when 班级 = ' 高一(2) ' then 1 else 0 end )
from tb
-- 如果班级比较多,而且不知道班级名称,使用下面动态语句
declare @sql varchar ( 8000 )
set @sql = ''
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
from tb
group by 班级 order by 班级 asc
exec ( ' select ' + @sql + ' from tb ' )
-- 删除测试表
drop table tb
文章来源于 http://www.cnblogs.com/zhangzs8896 版权归原作者所有<script language='javascript' src='http://www.shiqiaotou.com/donetk/Footer.js'></script>