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
Ale główną przyczyną problemu jest zły projekt bazy danych. Tematy te nie powinny być przede wszystkim kolumnami i powinny być przechowywane w tabeli bardzo podobnej do pożądanego wyniku.
Edytuj
Więc co to robi?
SELECT sid, 'Math' as subject, math as mark
FROM your_table
Zwraca sid kolumna, „wirtualna” kolumna z zakodowaną na stałe wartością 'Math' który ma nazwę subject . Ponieważ nie zapisałeś wartości 'Math' gdzieś to musiało być zakodowane. Następnie w końcu wybiera również kolumnę math używając nazwy mark zamiast. Zwróć uwagę na różnicę między math i 'Math' - jeden to kolumna, a drugi literał ciągu z powodu pojedynczych cudzysłowów.
Odbywa się to dla wszystkich trzech przedmiotów (jeśli miałeś cztery przedmioty, potrzebowałbyś czterech części w UNII)
UNION ALL łączy wszystkie trzy SELECT w jedno zapytanie. andr rozwiązanie (które zostało odrzucone przez kogoś, kto go nie rozumiał) czyni to jeszcze jaśniejszym, wyraźnie umieszczając to w tabeli pochodnej (lub w widoku wbudowanym).
Uruchom każdy SELECT samodzielnie, aby zobaczyć, co robią poszczególne części.
Część as mark jest nazywany „aliasem kolumny” i może być również używany do pobierania kolumn o tej samej nazwie z różnych tabel w łączeniu, które nadal mają unikalne nazwy w zestawie wyników.