SELECT sid, 'Math' as subject, math as mark
FROM your_table
UNION ALL
SELECT sid, 'English' as subject, english as mark
FROM your_table
UNION ALL
SELECT sid, 'French' as subject, french as mark
FROM your_table
Но основная причина вашей проблемы - неправильный дизайн базы данных. Эти предметы не должны быть столбцами в первую очередь и должны храниться в таблице, очень похожей на ваш желаемый результат.
Редактировать
Так что же он делает?
SELECT sid, 'Math' as subject, math as mark
FROM your_table
Возвращает столбец sid
, «виртуальный» столбец с жестко заданным значением 'Math'
, которому присваивается имя subject
. Поскольку вы не сохранили значение 'Math'
где-либо, это должно быть жестко задано. Затем, наконец, он также выбирает столбец math
, используя вместо него имя mark
. Обратите внимание на разницу между math
и 'Math'
- один является столбцом, а другой - строковым литералом из-за одинарных кавычек.
Это сделано для всех трех предметов (если у вас было четыре предмета, вам понадобилось бы четыре части в СОЮЗЕ)
UNION ALL объединяет все три SELECT в один запрос. Решение andr (которое было отвергнуто кем-то, кто его не понимал), делает это еще яснее, явно помещая это в производную таблицу (или встроенное представление).
Запустите каждый SELECT отдельно, чтобы увидеть, что делают отдельные части.
Деталь as mark
называется «псевдонимом столбца», и ее также можно использовать для извлечения столбцов с одинаковыми именами из разных таблиц в объединении, которые по-прежнему имеют уникальные имена в наборе результатов.