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
Men grundorsaken till ditt problem är en felaktig databasdesign. Dessa ämnen bör inte vara kolumner i första hand och bör lagras i en tabell som mycket liknar din önskade utdata.
Redigera
Så vad gör det?
SELECT sid, 'Math' as subject, math as mark
FROM your_table
Returnerar sid
kolumn, en "virtuell" kolumn med det hårdkodade värdet 'Math'
som får namnet subject
. Eftersom du inte har lagrat värdet 'Math'
någonstans måste detta hårdkodas. Sedan väljer den äntligen också kolumnen math
med namnet mark
istället. Observera skillnaden mellan math
och 'Math'
- en är en kolumn den andra en bokstavlig sträng på grund av de enstaka citattecken.
Detta görs för alla tre ämnen (om du hade fyra ämnen skulle du behöva fyra delar i UNION)
UNION ALL kombinerar alla tre SELECT till en enda fråga. andr-lösning (som har röstats ned av någon som inte förstod det) gör detta ännu tydligare genom att uttryckligen lägga det i en härledd tabell (eller inline-vy).
Kör varje SELECT för sig för att se vad de enskilda delarna gör.
Delen as mark
kallas ett "kolumnalias" och kan även användas för att hämta kolumner med samma namn från olika tabeller i en join och fortfarande ha unika namn i resultatuppsättningen.