您的位置:首页 > 数据库

关于统计的一个sql问题,使用动态sql语句实现。

2008-05-03 00:23 811 查看
问题出自: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

文章来源于 http://www.cnblogs.com/zhangzs8896 版权归原作者所有
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐