列を行に転置したり、MySQLでテーブルのピボットを解除したりする必要がある場合があります。 MySQLにはテーブルをUNPIVOTまたはREVERSEPIVOTする関数がないため、列を行に転置するSQLクエリを作成する必要があります。 MySQLでテーブルのピボットを解除する方法は次のとおりです。
MySQLでテーブルのピボットを解除する方法
次のピボットテーブルがあるとします
mysql>create table data(id int, a varchar(255), b varchar(255), c varchar(255)); mysql>insert into data(id,a,b,c) values(1,'a1','b1','c1'),(2,'a1','b1','c1'); mysql>select * from data; +------+------+------+------+ | id | a | b | c | +------+------+------+------+ | 1 | a1 | b1 | c1 | | 2 | a1 | b1 | c1 | +------+------+------+------+
MySQLのテーブルを次のようにピボット解除するとします。
1 | a1 | a 1 | b1 | b 1 | c1 | c 2 | a2 | a 2 | b2 | b 2 | c2 | c
ボーナスリード:MySQLで動的ピボットテーブルを作成する方法
MySQLのピボット解除テーブル
SQLでアンピボットを実行するためのクエリは次のとおりです。 MySQLはUNPIVOT関数を提供していないため、MySQLでテーブルを逆ピボットするには、でUNIONALL句を使用する必要があります。
mysql> select id, 'a' col, a value from data union all select id, 'b' col, b value from data union all select id, 'c' col, c value from data; +------+-----+-------+ | id | col | value | +------+-----+-------+ | 1 | a | a1 | | 2 | a | a1 | | 1 | b | b1 | | 2 | b | b1 | | 1 | c | c1 | | 2 | c | c1 | +------+-----+-------+
上記のクエリでは、基本的に元のテーブルを3つの小さなテーブルにカットします。1つは各列a、b、cに対応し、UNIONALLを使用してそれらを上下に追加します。
行をフィルタリングする場合は、以下に示すようにWHERE句を追加できます
mysql> select id, 'a' col, a value from data WHERE condition union all select id, 'b' col, b value from data WHERE condition union all select id, 'c' col, c value from data WHERE condition;
ボーナスリード:MySQLで行を列に動的に転置する方法
残念ながら、これは面倒ですが、MySQLでピボットを解除する2つの方法のうちの1つです。もう1つは、以下に示すように、クロス結合を実行することです。
mysql> select t.id, c.col, case c.col when 'a' then a when 'b' then b when 'c' then c end as data from data t cross join ( select 'a' as col union all select 'b' union all select 'c' ) c; +------+-----+------+ | id | col | data | +------+-----+------+ | 1 | a | a1 | | 2 | a | a1 | | 1 | b | b1 | | 2 | b | b1 | | 1 | c | c1 | | 2 | c | c1 | +------+-----+------+
ボーナスリード:MySQLでピボットテーブルクエリを自動化する方法
WHERE句を使用して、MySQLでテーブルのピボットを解除するように上記のクエリをカスタマイズできます。レポートツールを使用して、結果をテーブルにプロットすることもできます。これは、Ubiqを使用して作成されたテーブルの例です。
MySQLデータベースからピボットテーブル、チャート、ダッシュボードを作成する場合は、Ubiqを試すことができます。 14日間の無料トライアルを提供しています。