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.