代码改变世界

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)