2012-07-31 4 views
1

J'ai l'instruction SQL suivante (SQLite 3.0) qui joint deux tables, les résultats sont que j'ai un enregistrement par jour avec des totaux pour le jour, mais en me joignant à la table de langue, cela me donne , un pour chaque langue.Comment retourner plusieurs enregistrements d'un JOIN en tant que colonnes?

SELECT 
re.day, 
re.flashcardsAdded, 
re.flashcardsTested, 
re.flashcardsLearned, 
re.totalPoints AS totalForDay, 
la.language, 
la.total AS totalForLanguage 

FROM dpod_site_reportDays AS re 
JOIN dpod_site_reportDayLanguageTotals AS la ON re.day=la.day 
ORDER BY re.day DESC 

Cependant, Je veux qu'un seul enregistrement par jour et au lieu de par exemple "french" étant des données, je veux que ce soit un nom de colonne avec le total pour cette langue en tant que données pour cette colonne.

Comment puis-je modifier l'instruction SQL pour obtenir les totaux de langue dans le même enregistrement avec les noms de champs appropriés? .: par exemple

day | flashcardsAdded | flashcardsTested | flashcardsLearned | totalForDay | french | german | italian | russian | german 

enter image description here

Voici les tableaux:

CREATE TABLE dpod_site_reportDayLanguageTotals(
day VARCHAR(50), 
language VARCHAR(1024), 
total INT(12), 
extras VARCHAR(1024), 
idCode VARCHAR(1024), 
whenCreated VARCHAR(50), 
whenChanged VARCHAR(50), 
id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL UNIQUE) 

CREATE TABLE dpod_site_reportDays(
day VARCHAR(50), 
flashcardsAdded INT(12), 
flashcardsTested INT(12), 
flashcardsLearned INT(12), 
journalPoints INT(12), 
readingPoints INT(12), 
correctionPoints INT(12), 
extrasData TEXT, 
totalPoints INT(12), 
extras VARCHAR(1024), 
idCode VARCHAR(1024), 
whenCreated VARCHAR(50), 
whenChanged VARCHAR(50), 
id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL UNIQUE) 
+0

Je pense que vous avez oublié l'instruction SQL;) – SpaceBison

+0

Quel type de plate-forme SQL? – podiluska

+0

J'utilise SQLite 3. –

Répondre

2
SELECT 
re.day, 
re.flashcardsAdded, 
re.flashcardsTested, 
re.flashcardsLearned, 
re.totalPoints AS totalForDay, 
Sum(CASE la.language WHEN 'french' THEN la.total ELSE 0 END) AS french, 
Sum(CASE la.language WHEN 'german' THEN la.total ELSE 0 END) AS german, 
Sum(CASE la.language WHEN 'italian' THEN la.total ELSE 0 END) AS italian, 
Sum(CASE la.language WHEN 'russian' THEN la.total ELSE 0 END) AS russian 


FROM dpod_site_reportDays AS re 
JOIN dpod_site_reportDayLanguageTotals AS la ON re.day=la.day 
GROUP BY re.day, 
re.flashcardsAdded, 
re.flashcardsTested, 
re.flashcardsLearned, 
re.totalPoints 
ORDER BY re.day DESC 
Questions connexes