SQLでのピボット構文とデータ分析の方法


  1. 基本的なピボット構文の使用方法:

    SELECT 列1, 列2, ...,
          MAX(CASE WHEN 条件1 THEN 値 END) AS 列名1,
          MAX(CASE WHEN 条件2 THEN 値 END) AS 列名2,
          ...
    FROM テーブル名
    GROUP BY 列1, 列2, ...

    この構文では、CASE文を使用して特定の条件に基づいて値を集計し、新しい列に表示します。条件には、カラムの値や演算子を使用できます。この方法は、特定のカテゴリごとにデータをまとめ、比較や集計を行う際に便利です。

  2. 動的なピボット構文の使用方法: 基本的なピボット構文では、列の数が固定されていますが、データが頻繁に変更される場合や列の数が事前に分からない場合には、動的なピボット構文を使用することがあります。以下は、動的なピボット構文の一例です。

    DECLARE @列名 NVARCHAR(MAX)
    SELECT @列名 = COALESCE(@列名 + ', ', '') + QUOTENAME(列名)
    FROM (SELECT DISTINCT 列名 FROM テーブル名) AS 別名
    ORDER BY 列名
    DECLARE @動的SQL NVARCHAR(MAX)
    SET @動的SQL = N'
    SELECT 列1, 列2, ' + @列名 + '
    FROM (
       SELECT 列1, 列2, 列名, 値
       FROM テーブル名
    ) AS サブクエリ
    PIVOT (
       MAX(値)
       FOR 列名 IN (' + @列名 + ')
    ) AS ピボットテーブル'
    EXEC sp_executesql @動的SQL

    この構文では、動的SQLを生成して実行します。列名を動的に取得し、PIVOT句に渡すことで、テーブルの列数に関係なくピボット処理を行うことができます。

  3. データ分析の手法とコード例: ピボット構文を使用することで、データの集計や分析が容易になります。以下にいくつかのデータ分析の手法とそれに対応するSQLコード例を示します。

    • カテゴリごとの集計: 商品の売上データにおけるカテゴリごとの合計金額を求める場合、ピボット構文を使用できます。
    • 時系列データの集計: 日別、週別、月別などの集計を行う場合、ピボット構文を使用して期間ごとの合計や平均などを求めることができます。
    • クロス集計: カテゴリごとに横軸、年度ごとに縦軸としたクロス集計表を作成する場合、ピボット構文を使用することができます。