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 grundårsagen til dit problem er et forkert databasedesign. Disse emner bør ikke være kolonner i første omgang og bør gemmes i en tabel, der ligner dit ønskede output.
Rediger
Så hvad gør det?
SELECT sid, 'Math' as subject, math as mark
FROM your_table
Returnerer sid
kolonne, en "virtuel" kolonne med den hårdkodede værdi 'Math'
som får navnet subject
. Da du ikke har gemt værdien 'Math'
et eller andet sted skulle dette hardkodes. Så vælger den til sidst også kolonnen math
ved at bruge navnet mark
i stedet. Bemærk forskellen mellem math
og 'Math'
- den ene er en kolonne, den anden en streng bogstavelig på grund af de enkelte anførselstegn.
Dette gøres for alle tre fag (hvis du havde fire fag, skulle du bruge fire dele i UNION)
UNION ALL kombinerer alle tre SELECT til én enkelt forespørgsel. andr-løsning (som er blevet nedstemt af en, der ikke forstod det) gør dette endnu klarere ved eksplicit at sætte det i en afledt tabel (eller inline-visning).
Kør hver SELECT for sig for at se, hvad de enkelte dele gør.
Delen as mark
kaldes et "kolonnealias" og kan også bruges til at hente kolonner med samme navn fra forskellige tabeller i en join og stadig have unikke navne i resultatsættet.