2010-10-18 18 views
0

Disons que je le tableau suivant, appelé GPAs:Plusieurs lignes, une requête

name | semester | GPA 
Joe Winter  3.5 
Joe Spring  4.0 

Comment puis-je retourner les éléments suivants dans une requête?

name | gpaWinter | gpaSpring 

Joe  3.5   4.0 
+1

Tout d'abord, vous devez normaliser votre base de données. –

+1

@Col. Shrapnel: Cela ** est ** un schéma normalisé, ce qui vous permet de faire facilement des requêtes comme * Quelle est la moyenne GPA à travers les semestres? * – RedFilter

Répondre

1
SELECT name, (SELECT GPA FROM GPAs WHERE name = t1.name AND semester = 'Winter') AS `gpaWinter`, (SELECT GPA FROM GPAs WHERE name = t1.name AND semester = 'Spring') AS `gpaSpring` FROM GPAs t1 

Mais vous ne devriez pas faire cela dans SQL. Le but de SQL est de récupérer les données; le formater pour l'affichage est le travail du code de l'application.

+0

Cette requête ne fonctionnera pas pour le cas général qu'il recherche. –

+1

@Pablo: Je ne vois aucune référence à un cas général dans la question de l'OP. En fait, je ne vois que les détails d'un cas très spécifique. – RedFilter

+0

@RedFilter: d'accord. Néanmoins, je pense qu'il veut une solution générale. Je ne vous ai pas déprécié ou Dan, BTW. :-) –

2
select name, 
    max(case when semester = 'Winter' then GPA end) as gpaWinter, 
    max(case when semester = 'Spring' then GPA end) as gpaSpring 
from GPAs 
group by name 
+0

Pourquoi la downvote? – RedFilter

+0

+1. Mais il y a une virgule supplémentaire après 'gpaSpring,' – a1ex07

+0

@ alex07: typo fixed – RedFilter

1
SELECT name,GROUP_CONCAT(semester) AS semesters,GROUP_CONCAT(GPA) AS GPAs 
FROM GPAs 
GROUP BY name 

Cela renverra une ligne comme:

name | semesters | GPAs 
Joe Winter,Spring 3.5,4.0 

Ensuite, vous pouvez analyser les semestres et GPAs.

Vous pouvez aussi faire quelque chose comme GROUP_CONCAT(semester,'=',GPA) as GPAs, qui retournera:

name |   GPAs 
Joe  Winter=3.5,Spring=4.0 

Vous pouvez ensuite analyser la ligne de GPAs.

+1

Il n'y a pas de référence à PHP dans la question. – RedFilter

+0

Désolé. J'ai supprimé la référence PHP. –

Questions connexes