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

В принципе, мне нужно просмотреть строки, например: ID, columntitle, value Есть ли способ сделать это легко?

Ответ 1

Вы пытаетесь отключить данные. У MySQL нет функции univot, поэтому вам нужно будет использовать запрос 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 с демонстрацией

Ответ 2

Попробуйте использовать UNION ALL.

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