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
Ma la causa principale del tuo problema è una progettazione errata del database. Questi soggetti non dovrebbero essere colonne in primo luogo e dovrebbero essere archiviati in una tabella molto simile all'output desiderato.
Modifica
Allora cosa fa?
SELECT sid, 'Math' as subject, math as mark
FROM your_table
Restituisce il sid
column, una colonna "virtuale" con il valore hardcoded 'Math'
a cui viene dato il nome subject
. Poiché non hai memorizzato il valore 'Math'
da qualche parte, questo doveva essere codificato. Infine seleziona anche la colonna math
utilizzando il nome mark
invece. Nota la differenza tra math
e 'Math'
- uno è una colonna l'altro una stringa letterale a causa delle virgolette singole.
Questo viene fatto per tutte e tre le materie (se avessi quattro materie, avresti bisogno di quattro parti nell'UNIONE)
UNION ALL combina tutti e tre i SELECT in un'unica query. andr solution (che è stato declassato da qualcuno che non l'ha capito) lo rende ancora più chiaro inserendolo esplicitamente in una tabella derivata (o vista in linea).
Esegui ogni SELECT da solo per vedere cosa stanno facendo le singole parti.
La parte as mark
è chiamato "alias di colonna" e può essere utilizzato anche per recuperare colonne con lo stesso nome da tabelle diverse in un join e avere ancora nomi univoci nel set di risultati.