Этот ответ является небольшим обновлением до ответа @TimBiegeleisen.
если таблица большая, вам также необходимо использовать
SET SESSION group_concat_max_len = @@max_allowed_packet;
. Этот запрос преобразует разделенные запятыми значения из функции GROUP_CONCAT
в столбцы с помощью вложенных функций SUBSTRING_INDEX
.
Запрос
SELECT
ID
, SUBSTRING_INDEX(SUBSTRING_INDEX(val, ',', 1), ',', -1) AS r1
, SUBSTRING_INDEX(SUBSTRING_INDEX(val, ',', 2), ',', -1) AS r2
, SUBSTRING_INDEX(SUBSTRING_INDEX(val, ',', 3), ',', -1) AS r3
, SUBSTRING_INDEX(SUBSTRING_INDEX(val, ',', 4), ',', -1) AS r4
FROM (
SELECT
ID, GROUP_CONCAT(val ORDER BY val) val
FROM
(
SELECT ID, R1 AS val FROM yourTable
UNION ALL
SELECT ID, R2 FROM yourTable
) t
GROUP BY ID
) x
см. Демонстрацию http://rextester.com/SDF72100