21

現時点ではあまり明確ではないかもしれませんが、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

基本的に、次のような行を表示する必要があります: ID, columntitle,value これを簡単に行う方法はありますか?

4

3 に答える 3

26

データのピボットを解除しようとしています。MySQLにはunpivot関数がないため、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 FiddlewithDemoを参照してください。

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 FiddlewithDemoを参照してください

于 2013-03-04T00:12:11.353 に答える
2

UNIONALLを使用してみてください。

SELECT ID, a, 'a' 
FROM tbl
WHERE ID = 1
UNION
SELECT ID, b, 'b' 
FROM tbl
WHERE ID = 2
于 2013-03-04T00:08:23.403 に答える