Предполагая, что типы данных всех шестидесяти столбцов совместимы, мы могли бы сделать что-то вроде этого.
SELECT c.colname
, CASE c.colname
WHEN 'c1' THEN v1.`c1`
WHEN 'c2' THEN v1.`c2`
WHEN 'c3' THEN v1.`c3`
WHEN 'c4' THEN v1.`c4`
WHEN 'c5' THEN v1.`c5`
...
END AS `value 1`
, CASE c.colname
WHEN 'c1' THEN v2.`c1`
WHEN 'c2' THEN v2.`c2`
WHEN 'c3' THEN v2.`c3`
WHEN 'c4' THEN v2.`c4`
WHEN 'c5' THEN v2.`c5`
...
END AS `value 2`
FROM ( SELECT 1 AS seq, 'c1' AS colname
UNION ALL SELECT 2, 'c2'
UNION ALL SELECT 3, 'c3'
UNION ALL SELECT 4, 'c4'
UNION ALL SELECT 5, 'c5'
...
) c
CROSS
JOIN ( SELECT * FROM BIG_TABLE ORDER BY ... LIMIT 0,1 ) v1
CROSS
JOIN ( SELECT * FROM BIG_TABLE ORDER BY ... LIMIT 1,1 ) v2
ORDER
BY c.seq
Обратите внимание, что имена столбцов (c1
, c2
, c3
) должны бытьв жестком коде вместе с порядком их возврата.
Если нам нужно, чтобы имена столбцов были динамическими, нам понадобится отдельный оператор SQL для получения списка имен столбцов (information_schema.columns), а затем используйтеинформация, полученная для динамического построения оператора, как показано выше.