残念ながら、MySQLには、PIVOT
基本的に実行しようとしている機能がありません。CASE
したがって、次のステートメントで集計関数を使用する必要があります。
SELECT Month,
SUM(case when type = 'A' then 1 ELSE 0 END) as A,
SUM(case when type = 'B' then 1 ELSE 0 END) as B
FROM yourTable
GROUP BY month
デモで SQL Fiddle を参照してください
これを動的に実行する場合、つまり転置する列が事前にわからない場合は、次の記事を確認する必要があります。
動的ピボット テーブル (行を列に変換)
コードは次のようになります。
SET @sql = NULL;
SELECT
GROUP_CONCAT(DISTINCT
CONCAT(
'SUM(case when type = ''',
type,
''' then 1 ELSE 0 END) AS ',
type
)
) INTO @sql
FROM test;
SET @sql = CONCAT('SELECT month, ', @sql, ' FROM test GROUP BY month');
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
デモで SQL Fiddle を参照してください