MSSQL 行转列
来源:互联网 发布:林子方 知乎 编辑:程序博客网 时间:2024/06/07 18:07
测试数据
if object_id('tb')is not null drop table tbgocreate table tb([年度] varchar(4),[部门] varchar(10), [考核] int)insert tb values('2012','业务部',86)insert tb values('2012','办公室',78)insert tb values('2012','安保部',93)insert tb values('2013','业务部',75)insert tb values('2013','安保部',88)insert tb values('2013','办公室',94)insert tb values('2014','办公室',90)insert tb values('2014','安保部',74)insert tb values('2014','信息部',74)
在SQL2000中,行转列一般都要用聚合函数配合CASE WHEN实现,SQL2005及以后可以用PIVOT实现
2000静态SQL
select [年度],max(case [部门] when '业务部' then [考核] else 0 end)[业务部],max(case [部门] when '办公室' then [考核] else 0 end)[办公室],max(case [部门] when '安保部' then [考核] else 0 end)[安保部]from tbgroup by [年度]2000动态SQL,指部门数不固定
declare @sql varchar(2000)set @sql='select [年度]'select @sql=@sql+',max(case [部门] when '''+[部门]+''' then [考核] else 0 end) ['+部门+']' from(select distinct [部门] from tb) tset @sql=@sql+' from tb group by [年度]'exec(@sql)
2005静态SQL
select *from tbpivot(max([考核])for [部门]in(业务部,安保部,办公室))p
2005动态SQL
declare @sql varchar(2000)--获取部门数select @sql=isnull(@sql+',','')+quotename([部门]) from tb group by [部门]set @sql='select * from tb pivot(max([考核]) for [部门] in('+@sql+'))p'exec(@sql)
0 0
- mssql 行转列
- mssql行转列
- MSSQL 行转列
- MSSQL 行转列
- MSSQL 行转列问题
- mssql 高难度行转列
- Mssql表数据行转列
- MSSQL Server 动态行转列
- mssql
- mssql
- MSSQL
- MSSQL
- MSSQL
- MSSQL
- MSSQL
- MSSQL
- [MSSQL]采用pivot函数实现动态行转列
- MSSQL --- MSSQL体系结构一览
- 可编辑ztree节点的增删改功能图标控制---已解决
- C# using
- WM_WINDOWPOSCHANGING 消息
- HTML之Position用法
- 57、实例 使用jQuery设计滑动显隐效果
- MSSQL 行转列
- IOS Xcode5 IB tableView 简单使用
- IndexedDB的理解
- 58、实例 使用jQuery设计滑动显隐切换效果
- 产品经理的主要工作职责
- PHP学习实例—6(完美分页类)
- POJ 3187 Backward Digit Sums
- struts1源码分析-整体概览和核心组件
- 初试DLL注入