sql >> Base de Datos >  >> RDS >> Mysql

Declaración 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

Pero la causa raíz de su problema es un diseño de base de datos incorrecto. Esos temas no deberían ser columnas en primer lugar y deberían almacenarse en una tabla muy parecida a la salida deseada.

Editar

Entonces, ¿qué hace?

SELECT sid, 'Math' as subject, math as mark
FROM your_table

Devuelve el sid columna, una columna "virtual" con el valor codificado 'Math' que recibe el nombre subject . Como no ha almacenado el valor 'Math' en algún lugar, esto tenía que estar codificado. Luego, por fin, también selecciona la columna math usando el nombre mark en cambio. Tenga en cuenta la diferencia entre math y 'Math' - uno es una columna y el otro un literal de cadena debido a las comillas simples.

Esto se hace para las tres materias (si tuviera cuatro materias, necesitaría cuatro partes en la UNIÓN)

UNION ALL combina los tres SELECT en una sola consulta. andr solution (que ha sido rechazado por alguien que no lo entendió) lo hace aún más claro al colocarlo explícitamente en una tabla derivada (o vista en línea).

Ejecute cada SELECT por sí solo para ver qué están haciendo las partes individuales.

La parte as mark se denomina "alias de columna" y también se puede usar para recuperar columnas con el mismo nombre de diferentes tablas en una unión y aún así tener nombres únicos en el conjunto de resultados.