FC2ブログ
 

Technology へようこそ
ここは技術者の「経験」と「ノウハウ」のブログです


--年--月--日

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。


2008年09月25日

PIVOT

SQL Server 2005 では、
ピボット機能を実現するPIVOT/UNPIVOT 演算子が導入されています。
データをまとめるためにクロス集計レポートを生成する場合の用途で使えるようです。
以下は使用例です。
-- サンプルデータ
create table ##sample (
member_name varchar(20)
, try_month varchar(10)
, score int
)

insert into ##sample values ('Aさん','7月',83)
insert into ##sample values ('Aさん','7月',75)
insert into ##sample values ('Aさん','8月',102)
insert into ##sample values ('Aさん','8月',92)
insert into ##sample values ('Bさん','7月',90)
insert into ##sample values ('Bさん','7月',87)
insert into ##sample values ('Bさん','8月',85)
insert into ##sample values ('Bさん','8月',77)

-- PIVOT 実行例
select
member_name as [メンバー]
, [7月] as [7月]
, [8月] as [8月]
from
(
select
try_month
, member_name
, score
from
##sample
) a
pivot
(
avg(score)
for try_month in ([7月],[8月])
) as pvt

-- UNPIVOT 実行例
select
member_name as [メンバー]
, try_month as [開催月]
, Orders as [平均スコア]
from
(
select
member_name
, avg(case when try_month = '7月' then [score] else null end) as [7月]
, avg(case when try_month = '8月' then [score] else null end) as [8月]
from
##sample
group by
member_name
) p
unpivot
(Orders for try_month in ([7月],[8月]) ) as unpvt

PIVOT 実行例の結果は

メンバー 7月 8月
--------- ---- -----
Aさん 79 97
Bさん 88 81

UNPIVOT 実行例の結果は

メンバー 開催月 平均スコア
--------- ------ -----------
Aさん 7月 79
Aさん 8月 97
Bさん 7月 88
Bさん 8月 81
[ posted by kami ]

この記事に対するコメント


この記事に対するコメントの投稿














管理者にだけ表示を許可する



この記事に対するトラックバック
トラックバックURL
http://comfair2.blog24.fc2.com/tb.php/391-b333c7de
この記事にトラックバックする(FC2ブログユーザー)











上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。