web-dev-qa-db-ja.com

MySQL-テーブルを別のテーブルに変える

現時点では、おそらくあまり明確なことはわかりませんが、MySQLには次のようなテーブルがあります。

ID | a  | b  | c 
1  | a1 | b1 | c1
2  | a2 | b2 | c2

何らかの理由で(実際にはIDに基づく別のテーブルへの結合ですが、誰かがこの部分を手伝ってくれるなら、残りは自分でできると思います)、代わりにこれらの行をこのようにする必要がありました:

1 | a1 | a
1 | b1 | b
1 | c1 | c
2 | a2 | a
2 | b2 | b
2 | c2 | c

したがって、基本的に、次のような行を表示する必要があります:IDcolumntitlevalueこれを簡単に行う方法はありますか?

18
user2128539

データをピボット解除しようとしています。 MySQLにはピボット解除関数がないため、UNION ALLクエリを使用して列を行に変換する必要があります。

select id, 'a' col, a value
from yourtable
union all
select id, 'b' col, b value
from yourtable
union all
select id, 'c' col, c value
from yourtable

SQL Fiddle with Demo を参照してください。

これは、CROSS JOINを使用して実行することもできます。

select t.id,
  c.col,
  case c.col
    when 'a' then a
    when 'b' then b
    when 'c' then c
  end as data
from yourtable t
cross join
(
  select 'a' as col
  union all select 'b'
  union all select 'c'
) c

SQL Fiddle with Demo を参照してください

21
Taryn

NION ALL を使用してみてください。

SELECT ID, a, 'a' 
FROM tbl
WHERE ID = 1
UNION
SELECT ID, b, 'b' 
FROM tbl
WHERE ID = 2
3
Iswanto San