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 hlavní příčinou vašeho problému je špatný návrh databáze. Tyto předměty by na prvním místě neměly být sloupce a měly by být uloženy v tabulce velmi podobné vašemu požadovanému výstupu.
Upravit
Co to tedy dělá?
SELECT sid, 'Math' as subject, math as mark
FROM your_table
Vrátí sid
sloupec, "virtuální" sloupec s pevně zakódovanou hodnotou 'Math'
která má název subject
. Protože jste neuložili hodnotu 'Math'
někde to muselo být pevně zakódováno. Nakonec také vybere sloupec math
pomocí názvu mark
namísto. Všimněte si rozdílu mezi math
a 'Math'
- jeden je sloupec a druhý řetězcový literál kvůli jednoduchým uvozovkám.
To se provádí pro všechny tři předměty (pokud byste měli čtyři předměty, potřebovali byste v UNIONu čtyři části)
UNION ALL kombinuje všechny tři SELECTy do jednoho jediného dotazu. řešení andr (které bylo odmítnuto někým, kdo mu nerozuměl) to ještě více objasňuje tím, že to explicitně vloží do odvozené tabulky (nebo vloženého pohledu).
Spusťte každý SELECT samostatně, abyste viděli, co jednotlivé části dělají.
Část as mark
se nazývá "alias sloupce" a lze jej také použít k načtení sloupců se stejným názvem z různých tabulek ve spojení, a přesto mají ve výsledné sadě jedinečné názvy.