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
Die Hauptursache Ihres Problems ist jedoch ein falsches Datenbankdesign. Diese Themen sollten in erster Linie keine Spalten sein und sollten in einer Tabelle gespeichert werden, ganz ähnlich wie Ihre gewünschte Ausgabe.
Bearbeiten
Was macht es also?
SELECT sid, 'Math' as subject, math as mark
FROM your_table
Gibt die sid
zurück Spalte, eine "virtuelle" Spalte mit dem fest codierten Wert 'Math'
das den Namen subject
erhält . Da Sie den Wert 'Math'
nicht gespeichert haben irgendwo musste dies fest codiert werden. Dann selektiert es zuletzt auch die Spalte math
mit dem Namen mark
stattdessen. Beachten Sie den Unterschied zwischen math
und 'Math'
- das eine ist eine Spalte, das andere wegen der einfachen Anführungszeichen ein String-Literal.
Dies wird für alle drei Fächer gemacht (wenn Sie vier Fächer hätten, bräuchten Sie vier Teile in der UNION)
Die UNION ALL kombiniert alle drei SELECTs in einer einzigen Abfrage. andr-Lösung (die von jemandem, der sie nicht verstanden hat, herabgestuft wurde) macht dies noch deutlicher, indem sie dies explizit in eine abgeleitete Tabelle (oder Inline-Ansicht) einfügt.
Führen Sie jedes SELECT einzeln aus, um zu sehen, was die einzelnen Teile tun.
Der Teil as mark
wird als "Spaltenalias" bezeichnet und kann auch verwendet werden, um Spalten mit demselben Namen aus verschiedenen Tabellen in einem Join abzurufen und dennoch eindeutige Namen in der Ergebnismenge zu haben.