Skill Note

平凡なエンジニアがメモ代わりにプログラミング, インフラ, ネットワークを書き綴るブログ

[SQL Server]クロス集計の方法

      2014/10/28

sqlserer

PIVOTを使ってクロス集計する

SQL ServerでExcelのピボットテーブルのようなクロス集計をするには、PIVOT関係演算子を使って集計することができます。

PIVOT関係演算子とは?

関係演算子 PIVOT および UNPIVOT を使用すると、テーブル値式を別のテーブルに変更できます。PIVOT 関係演算子は、テーブル値式の中のある列から一意の値を取得して出力側の複数の列に変換することで式を行列変換し、最終的な出力のそれ以外の列値に必要な集計を行います。UNPIVOT 関係演算子の機能は PIVOT 関係演算子の逆で、テーブル値式の複数の列を列値に行列変換します。

http://technet.microsoft.com/ja-jp/library/ms177410(v=sql.105).aspx

ようするに行列変換をした形で集計データを出力してくれるので、 プログラムで行列を入れ替える必要がなく、簡単にクロス集計表を作ることができるようになります。

使い方

下記のような売上データがあるとします。

日付商品売上金額
10/01鉛筆100
10/01消しゴム50
10/01鉛筆100
10/02消しゴム50
10/02消しゴム50
10/03鉛筆100
10/03鉛筆100

 日別の商品売上金額を集計するには下記のクエリで集計できます。 

日付商品
10/01鉛筆200
10/01消しゴム50
10/02消しゴム100
10/03鉛筆200

 日別売上を集計するだけなら単純なクエリで集計することができますが、上記の集計結果から、縦軸に商品、横軸に日付をもつ日別の売上推移を見せるには行列を入れ替えるなどデータを加工する必要があります。 

PIVOTを使ったクエリを発行することで、データを加工する必要がなく簡単にクロス集計をすることができます。 

商品10/0110/0210/03
鉛筆2000200
消しゴム501000

Google AdSense PC

Google AdSense PC

Message

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

  関連記事

oracle
[Oracle]端数処理、丸めの方法

ORACLEで数値の端数処理、数値丸めをする 数値を四捨五入する場合は、ROUND関数数値を切り捨てる場合は、TRUNC関数各関数の第2引数の値で、小数部、また …

db
[Database]データベースのバージョン/エディションを確認する方法

OracleとSQLServerのバージョン/エディションを確認 Oracle

SQLServ …

oracle
[Oracle]トリガーの実行順序を設定する方法

FOLLOWS句を使用して実行順序を設定する 1つの表に対して同レベル(タイミング)のトリガーを複数作成することはできますが、実行順序は保証されていません。 実 …

oracle
Oracle12cでユーザを作成する方法

SQLコマンドを使用したユーザ作成 Oracle12cからマルチテナント・アーキテクチャが採用されており、以前までの手順ではユーザが作成できません。 ここではP …

sqlserer
[SQL Server]再帰SQLで集計する

WITH(共通テーブル式)を使って集計する WITH句とは 共通テーブル式 (CTE) は、単一の SELECT、INSERT、UPDATE、DELETE、CR …

sqlserer
[SQL Server]データを期間別に集計する

SQL Serverで集計表を出力 日付をDATETIME型で管理している場合、CONVERT関数、DATEPART関数を使って、日、週、月、年別の集計結果を出 …

oracle
[Oracle]ジョブをスケジューリングして定期実行する方法

DBMS_SCHEDULERパッケージを使用したジョブスケジューリング Oracleでジョブを定期実行するには、DBMS_SCHEDULERパッケージやDBMS …

sqlserer
[SQL Server]IDENTITYの値を初期化する

ID値の初期化(リセット)方法 IDENTITYプロパティを設定した列のID値を初期化(リセット)する方法を記載します。 現在のID値を確認する ID値を確認す …

oracle
[Oracle]WEBサイトやWEB APIをOracleから呼び出す方法

WEBリクエストを送信してレスポンスを表示する OracleからWEBサイトやWEB APIなどのネットワークサービスを呼び出すには、UTL_HTTPパッケージ …

sqlserer
[SQLServer]日付文字列 + 時刻文字列をDATETIME型に変換する方法

SQLServerで日付文字列 + 時刻文字列をDATETIME型に変換する方法 日付と時刻を別のカラムに格納している場合に日時データとして扱いたい場合はCON …