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
Mas a causa raiz do seu problema é um design de banco de dados errado. Esses assuntos não devem ser colunas em primeiro lugar e devem ser armazenados em uma tabela muito parecida com a saída desejada.
Editar
Então o que ele faz?
SELECT sid, 'Math' as subject, math as mark
FROM your_table
Retorna o
sid
coluna, uma coluna "virtual" com o valor codificado 'Math'
que recebe o nome subject
. Como você não armazenou o valor 'Math'
em algum lugar, isso tinha que ser codificado. Então, finalmente, ele também seleciona a coluna math
usando o nome mark
em vez de. Observe a diferença entre math
e 'Math'
- uma é uma coluna e a outra um literal de string por causa das aspas simples. Isso é feito para todos os três assuntos (se você tivesse quatro assuntos, você precisaria de quatro partes no UNION)
O UNION ALL combina todos os três SELECTs em uma única consulta. andr solução (que foi votada por alguém que não a entendeu) torna isso ainda mais claro ao colocar explicitamente isso em uma tabela derivada (ou visualização em linha).
Execute cada SELECT por conta própria para ver o que as partes individuais estão fazendo.
A parte
as mark
é chamado de "alias de coluna" e também pode ser usado para recuperar colunas com o mesmo nome de tabelas diferentes em uma junção e ainda ter nomes exclusivos no conjunto de resultados.