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
Maar de hoofdoorzaak van uw probleem is een verkeerd databaseontwerp. Die onderwerpen zouden in de eerste plaats geen kolommen moeten zijn en moeten worden opgeslagen in een tabel die erg lijkt op de gewenste uitvoer.
Bewerken
Dus wat doet het?
SELECT sid, 'Math' as subject, math as mark
FROM your_table
Retourneert de sid
kolom, een "virtuele" kolom met de hardgecodeerde waarde 'Math'
dat krijgt de naam subject
. Omdat je de waarde 'Math'
. niet hebt opgeslagen ergens moest dit hardcoded zijn. Dan selecteert het eindelijk ook de kolom math
met de naam mark
in plaats van. Let op het verschil tussen math
en 'Math'
- de ene is een kolom, de andere een letterlijke tekenreeks vanwege de enkele aanhalingstekens.
Dit wordt gedaan voor alle drie de vakken (als je vier vakken had, heb je vier onderdelen nodig in de UNION)
De UNION ALL combineert alle drie SELECT's in één enkele query. andr-oplossing (die is weggestemd door iemand die het niet begreep) maakt dit nog duidelijker door dat expliciet in een afgeleide tabel (of inline-weergave) te plaatsen.
Voer elke SELECT afzonderlijk uit om te zien wat de afzonderlijke onderdelen doen.
Het onderdeel as mark
wordt een "kolomalias" genoemd en kan ook worden gebruikt om kolommen met dezelfde naam uit verschillende tabellen in een join op te halen en toch unieke namen in de resultatenset te hebben.