Mysql
 sql >> Base de données >  >> RDS >> Mysql

Instruction de requête 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

Mais la cause première de votre problème est une mauvaise conception de la base de données. Ces sujets ne doivent pas être des colonnes en premier lieu et doivent être stockés dans une table très semblable à la sortie souhaitée.

Modifier

Alors qu'est-ce que ça fait ?

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

Renvoie le sid colonne, une colonne "virtuelle" avec la valeur codée en dur 'Math' qui porte le nom subject . Comme vous n'avez pas enregistré la valeur 'Math' quelque part, cela devait être codé en dur. Puis enfin il sélectionne également la colonne math en utilisant le nom mark Au lieu. Notez la différence entre math et 'Math' - l'un est une colonne, l'autre une chaîne littérale à cause des guillemets simples.

Ceci est fait pour les trois matières (si vous aviez quatre matières, vous auriez besoin de quatre parties dans l'UNION)

L'UNION ALL combine les trois SELECT en une seule requête. andr solution (qui a été rejetée par quelqu'un qui ne l'a pas compris) rend cela encore plus clair en le mettant explicitement dans une table dérivée (ou une vue en ligne).

Exécutez chaque SELECT seul pour voir ce que font les parties individuelles.

La partie as mark est appelé "alias de colonne" et peut également être utilisé pour récupérer des colonnes portant le même nom à partir de différentes tables dans une jointure et avoir toujours des noms uniques dans le jeu de résultats.