サーチ…


備考

MySQLのピボットクエリの作成は、 GROUP_CONCAT()関数に依存しています。ピボットクエリの列を作成する式の結果が大きいと予想される場合は、 group_concat_max_len変数の値をgroup_concat_max_lenする必要があります。

set session group_concat_max_len = 1024 * 1024; -- This should be enough for most cases

ピボットクエリの作成

MySQLは、ピボットクエリを作成するための組み込みの方法を提供していません。ただし、これらはプリペアドステートメントを使用して作成できます。

テーブルtbl_values仮定します。

イドグループ
1 ピート A 10
2 ピート B 20
3 ジョン A 10

リクエスト:各NameValueの合計を示すクエリを作成します。 Groupは列ヘッダーでなければならず、 Nameは行ヘッダーでなければなりません。

-- 1. Create an expression that builds the columns
set @sql = (
    select group_concat(distinct 
        concat(
            "sum(case when `Group`='", Group, "' then `Value` end) as `", `Group`, "`"
        )
    ) 
    from tbl_values
);

-- 2. Complete the SQL instruction
set @sql = concat("select Name, ", @sql, " from tbl_values group by `Name`");

-- 3. Create a prepared statement
prepare stmt from @sql;

-- 4. Execute the prepared statement
execute stmt;

結果:

A B
ジョン 10 ヌル
ピート 10 20

重要:不要になった準備済みのステートメントの割り当てを解除する:

deallocate prepare stmt;

SQL Fiddleの例



Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow