Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Instrução de consulta SQL

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.