SQL Server中行列转换 Pivot UnPivot

分类:数据库
 标签:SQL Server,Pivot,UnPivot,行转列
   修改 | 阅读(277)| 评论(0)
PIVOT用于将列值旋转为列名(即行转列),在SQL Server 2000可以用聚合函数配合CASE语句实现。
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
原表结构:

行转列后的结构:

您的昵称:*
QQ登录(无需注册直接登录可进行回复)
您的邮箱:(填写邮箱,如有回复可进行邮件通知)
验证码:
点击刷新