[SQL Server]クロス集計の方法
2017/10/07
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 |
日別の商品売上金額を集計するには下記のクエリで集計できます。
1 2 3 4 |
SELECT 日付, 商品, SUM(売上金額) AS 計 FROM 売上データ GROUP BY 日付, 商品 ORDER BY 日付, 商品 |
日付 | 商品 | 計 |
---|---|---|
10/01 | 鉛筆 | 200 |
10/01 | 消しゴム | 50 |
10/02 | 消しゴム | 100 |
10/03 | 鉛筆 | 200 |
日別売上を集計するだけなら単純なクエリで集計することができますが、上記の集計結果から、縦軸に商品、横軸に日付をもつ日別の売上推移を見せるには行列を入れ替えるなどデータを加工する必要があります。
PIVOTを使ったクエリを発行することで、データを加工する必要がなく簡単にクロス集計をすることができます。
1 2 3 4 5 6 |
SELECT T.商品 , ISNULL(T.[10/01], 0) AS [10/01] , ISNULL(T.[10/02], 0) AS [10/02] , ISNULL(T.[10/03], 0) AS [10/03] FROM 売上データ PIVOT(SUM(売上金額) FOR 日付 IN ([10/01], [10/02], [10/03])) T |
商品 | 10/01 | 10/02 | 10/03 |
---|---|---|---|
鉛筆 | 200 | 0 | 200 |
消しゴム | 50 | 100 | 0 |
Google AdSense PC
Google AdSense PC
関連記事
-
-
[Oracle]トリガーの実行順序を設定する方法
FOLLOWS句を使用して実行順序を設定する 1つの表に対して同レベル(タイミング)のトリガーを複数作成することはできますが、実行順序は保証されていません。 実 …
-
-
[SQL Server]IDENTITYの値を初期化する
ID値の初期化(リセット)方法 IDENTITYプロパティを設定した列のID値を初期化(リセット)する方法を記載します。 現在のID値を確認する ID値を確認す …
-
-
[Oracle]データベースを再構築してOracle Expressのキャラクタセットを変更する
前回の記事でCSALTERを使用したキャラクタセットの変更方法を記載しましたが、サブセットのキャラクタセットからスーパセットへの変更のみ可能でした。 この記事で …
-
-
[Oracle]CSALTERを使用してOracle Expressのキャラクタセットを変更する
Oracle Expressでは標準のキャラクタセットとしてAL32UTF8が設定されます。キャラクタセットを意識しないでデータベースの移行やデータベース間のデ …
-
-
[Oracle]インストールに失敗する原因と対処方法
Oracleインストールエラー時の確認事項 OracleのデータベースやクライアントをWindowsへインストール中に インストーラが途中で落ちたり、エラーが発 …
-
-
[Oracle]Data Pumpを使用したデータベースのバックアップ
Data Pump機能のexpdp/impdpコマンドを使用するとデータベース全体、スキーマ単位、表単位など対象範囲を指定したバックアップやリストアを行うことが …
-
-
[Oracle]Oracle Clientのアンインストール方法
Oracle Clientを完全にアンインストールする 環境 OS:Windows Server 2008 R2 64bitOracle Client:11g …
-
-
[SQL Server]再帰SQLで集計する
WITH(共通テーブル式)を使って集計する WITH句とは 共通テーブル式 (CTE) は、単一の SELECT、INSERT、UPDATE、DELETE、CR …
-
-
[SQLServer]日付文字列 + 時刻文字列をDATETIME型に変換する方法
SQLServerで日付文字列 + 時刻文字列をDATETIME型に変換する方法 日付と時刻を別のカラムに格納している場合に日時データとして扱いたい場合はCON …
-
-
ODP.NETをNuGetからインストールする
ODP.NETのインストール手順 Oracle 12cから公式のODP.NETがNuGetに追加されました。 この記事ではODP.NETをNuGetからインスト …