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)
UNION ALL комбинира всичките три SELECT в една единствена заявка. andr решение (което беше гласувано против от някой, който не го е разбрал) прави това още по-ясно, като изрично го поставя в извлечена таблица (или вграден изглед).
Стартирайте всеки SELECT самостоятелно, за да видите какво правят отделните части.
Частта as mark
се нарича "псевдоним на колона" и може също да се използва за извличане на колони с едно и също име от различни таблици в съединение и все още да имат уникални имена в резултатния набор.