SQLServer 2005でPivotを使用して行列変換で発生した問題


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(),'張三',200,'養老保険')
Insert into Insurances values(newid(),'張三',300,'医療保険')
Insert into Insurances values(newid(),'李四',250,'養老保険')
Insert into Insurances values(newid(),'李四',350,'医療保険')
Insert into Insurances values(newid(),'王二',150,'養老保険')
Insert into Insurances values(newid(),'王二',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枚3 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

 
現在のデータベースの互換性レベルを表示するには、現在のデータベースを右クリックします.