SQL中行列转换Pivot
2013-10-31 00:26
363 查看
--建表 create table tb(姓名 varchar(10),课程 varchar(10),分数 int) --插入数据 insert into tb values('张三','语文',74) insert into tb values('张三','数学',83) insert into tb values('张三','物理',93) insert into tb values('李四','语文',74) insert into tb values('李四','数学',84) insert into tb values('李四','物理',94)
1.静态行转列(确定有哪些列)
select 姓名, max(case 课程 when'语文' then 分数 else 0 end)语文, max(case 课程 when'数学' then 分数 else 0 end)数学, max(case 课程 when'物理' then 分数 else 0 end)物理 from tb group by 姓名
2.动态行转列(不确定有哪些列)
declare @sql varchar(500) set @sql='select 姓名' select @sql=@sql+',max(case 课程 when '''+课程+''' then 分数 else 0 end)['+课程+']' from(select distinct 课程 from tb) a --同from tb group by课程,默认按课程名排序 set @sql=@sql+' from tb group by 姓名' exec(@sql)
或者
declare @sql varchar(8000) select @sql=isnull(@sql+',','')+' max(case 课程 when '''+课程+''' then 分数 else 0 end) ['+课程+']' from(select distinct 课程 from tb) a select @sql set @sql='select 姓名,'+@sql+' from tb group by 姓名' exec(@sql)
使用prvot
select * from tb pivot(max(分数)for 课程 in(语文,数学,物理))a
declare @sql varchar(8000) set @sql='' --初始化变量@sql select @sql=@sql+','+课程 from tb group by 课程--变量多值赋值 set @sql=stuff(@sql,1,1,'')--去掉首个',' set @sql='select * from tb pivot (max(分数) for 课程 in ('+@sql+'))a' exec(@sql)
declare @sql varchar(8000) --获得课程集合 select @sql=isnull(@sql+',','')+课程 from tb group by 课程 set @sql='select * from tb pivot (max(分数) for 课程 in ('+@sql+'))a' exec(@sql)
相关文章推荐
- SQL 2008行列转换的pivot--产生动态列
- sql 行列转换之关键字pivot,unpivot
- T-SQL行列相互转换命令:PIVOT和UNPIVOT使用详解
- SQL行列转换,PIVOT与UNPIVOT的区别和使用方法举例
- t-sql中pivot用法(行列转换)
- 使用 PIVOT 和 UNPIVOT(MS SQL Server行列转换)
- SQL Server SQL性能优化之--pivot行列转换减少扫描计数优化查询语句
- 每日学习心得:SQL查询表的行列转换/小计/统计(with rollup,with cube,pivot解析)
- SQl2005行列转换 pivot/unpivot
- SQL中行列转换 Pivot UnPivot 行列转化与PIVOT、UNPIVOT运算符使用
- SQL 2005 行列转换 实例(函数PIVOT&UNPIVOT)
- 浅析SQL语句行列转换的两种方法 case...when与pivot函数的应用
- SQL查询表的行列转换/小计/统计(with rollup,with cube,pivot解析)
- 每日学习心得:SQL查询表的行列转换/小计/统计(with rollup,with cube,pivot解析)
- SQL面试题练习-实现pivot行列转换
- 每日学习心得:SQL查询表的行列转换/小计/统计(with rollup,with cube,pivot解析)
- Sql 行列转换 动态Sql(Pivot)
- SQL语句行列转换两种方法 case ...when 和pivot函数应用
- SQL(横表和纵表)行列转换,PIVOT与UNPIVOT的区别和使用方法举例,合并列的例子
- 浅析SQL语句行列转换的两种方法 case...when与pivot函数的应用