1.创建表脚本
if exists (select 1
from sysobjects
where id = object_id('Insurances')
and type = 'U')
drop table Insurances
go
/*==============================================================*/
/* Table: Insurances */
/*==============================================================*/
create table Insurances (
RefID uniqueidentifier not null,
HRMS nvarchar(20) null,
Name nvarchar(20) null,
InsuranceMoney money null,
InsuranceName nvarchar(100) not null,
constraint PK_INSURANCES primary key (RefID)
)
go
2.测试数据脚本
insert into Insurances values (newid(),1,'张三',200,'养老保险')
insert into Insurances values (newid(),1,'张三',300,'医疗保险')
insert into Insurances values (newid(),2,'李四',250,'养老保险')
insert into Insurances values (newid(),2,'李四',350,'医疗保险')
insert into Insurances values (newid(),3,'王二',150,'养老保险')
insert into Insurances values (newid(),3,'王二',300,'医疗保险')
3.查询表数据
select HRMS,Name,InsuranceMoney,InsuranceName From Insurances
HRMS Name InsuranceMoney InsuranceName
-------------------- -------------------- --------------------- ----------
1 张三 200.00 养老保险
2 李四 350.00 医疗保险
2 李四 250.00 养老保险
1 张三 300.00 医疗保险
3 王二 300.00 医疗保险
3 王二 150.00 养老保险
4.转置表数据
select * from
(
select HRMS,Name,InsuranceMoney,InsuranceName from Insurances
) p
Pivot (
sum(InsuranceMoney)
FOR InsuranceName IN
( [医疗保险], [养老保险]))
as pvt
HRMS Name 医疗保险 养老保险
-------------------- -------------------- --------------------- ---------------------
2 李四 350.00 250.00
3 王二 300.00 150.00
1 张三 300.00 200.00
声明:以上测试数据来自互联网,重点强调下面提示错误的解决办法
http://www.cnblogs.com/icebutterfly/archive/2009/08/07/1541322.html
执行4中的语句会出现错误提示:
'Pivot' 附近有语法错误。您可能需要将当前数据库的兼容级别设置为更高的值,以启用此功能。有关存储过程 sp_dbcmptlevel 的信息,请参见帮助。
解决办法:
需要将当前数据库的兼容级别设置为更高的值,默认80,设置为90即可
EXEC sp_dbcmptlevel '数据库名', 90
查看当前数据库的兼容级别:右击当前数据库---->属性---->选项