UNPIVOT用于将列明转为列值(即列转行),在SQL Server 2000可以用UNION来实现。
PIVOT的完整语法:
table_source PIVOT( 聚合函数(value_column) FOR pivot_column IN(<column_list>) )
UNPIVOT的完整语法:
table_source UNPIVOT( value_column FOR pivot_column IN(<column_list>) )
注意:PIVOT、UNPIVOT是SQL Server 2005 的语法,使用需修改数据库兼容级别
在数据库属性->选项->兼容级别改为 90
示例:
if object_id('tb') is not null drop table tb go create table tb([S_REG] varchar(10),[S_ARER] varchar(10),[D_COLUMN] varchar(20),[VALUE] int) insert into tb values('广东','广州市','双喜@软锦绣',74) insert into tb values('广东','深圳市','双喜@软如意',26) insert into tb values('广东','深圳市','双喜@软如意',34) insert into tb values('广东','东莞市','双喜@软珍品',83) insert into tb values('广东','广州市','双喜@软珍品',83) insert into tb values('广东','广州市','双喜@软珍品',11) go select * from tb go select [S_REG],[S_ARER],[双喜@软锦绣],[双喜@软如意],[双喜@软珍品] from tb pivot(sum([VALUE])for [D_COLUMN] in([双喜@软锦绣],[双喜@软如意],[双喜@软珍品]))a drop table tb原表结构:
行转列后的结构: