关于统计的一个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 版权归原作者所有
原来表内容:
姓名 年龄 班级
----- ----------- ----------
张三 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 版权归原作者所有
相关文章推荐
- 关于统计的一个sql问题,使用动态sql语句实现。
- 关于一个sql语句需要使用约等于的问题
- 关于SQL语句的占位符使用及动态SQL
- 关于Qt使用QSqlQuery执行sql语句时出现out of memory的问题
- Mybatis:关于动态生成sql语句的一些问题
- 关于如何使用反射声明一个泛型类型变量(泛型参数是动态的)的问题
- 关于mybatis插件tk.mybatis生成的动态sql语句字段不加``的问题
- delphi中使用sql语句加条件引用时值是一个整型变量的问题
- ssm项目使用Mybatis动态拼接sql语句,生成的sql中文全部显示为???的问题(配置文件sql语句中文解析问题)
- SQL:行合并问题 & 使用 SP_executesql 从exec('SQL语句') 中得到一个返回值
- 一个关于使用 $month,$dayOfMonth 进行按月/日统计的问题
- 关于Hibernate在使用原生SQL语句多表查询所遇到的问题
- 关于《一个SQL语句查询问题(查询最小值)(急)》回复里面没有正确理想的答案!
- 使用Rocker模板引擎解决动态拼接SQL语句的问题
- 使用SQL查询语句时,数组动态赋值SQL IN ()作为条件条件一个
- 使用反射让linq实现动态查询, 类似拼接sql语句的where 条件
- 关于SQL的over partition by 开窗语句在分页和统计中的使用总
- 使用反射让linq实现动态查询, 类似拼接sql语句的where 条件
- 一次ORA-4030问题诊断及解决【解决思路不错,说明了对象的统计信息与优化器的优化操作(即选择执行一个SQL语句在该优化参数环境下最佳的执行计划)间的关系】
- 一个iBATIS的简单实现(含sql语句中表名等的动态传入)