SQL Server中行列转换 Pivot UnPivot
2012-04-21 15:04 suzh 阅读(296) 评论(0) 编辑 收藏 举报SQL Server中行列转换 Pivot UnPivot
PIVOT用于将列值旋转为列名(即行转列),在SQL Server 2000可以用聚合函数配合CASE语句实现
PIVOT的一般语法是:PIVOT(聚合函数(列) FOR 列 in (…) )AS P
完整语法:
table_source
PIVOT(
聚合函数(value_column)
FOR pivot_column
IN(<column_list>)
)
UNPIVOT用于将列明转为列值(即列转行),在SQL Server 2000可以用UNION来实现
完整语法:
table_source
UNPIVOT(
value_column
FOR pivot_column
IN(<column_list>)
)
注意:PIVOT、UNPIVOT是SQL Server 2005 的语法,使用需修改数据库兼容级别
在数据库属性->选项->兼容级别改为 90
create table test2(id varchar(10),count int,name varchar(10),riqi varchar(20))
insert into test2
select 'AA',3,'安贞','2012年3月'
union all
select 'BB',5,'安贞','2012年4月'
declare @sql varchar(8000)
set @sql='' --初始化变量@sql
select @sql=@sql+','+'['+riqi+']' from test2 group by riqi--变量多值赋值 要转换为列名的字段 如果为数字用“[]”号分隔
set @sql=stuff(@sql,1,1,'')--去掉首个','
set @sql='select * from test2 pivot (max(ts_count) for riqi in ('+@sql+'))pvt'
exec(@sql)