¿Cómo devolver múltiples registros de un JOIN como columnas?

Tengo la siguiente instrucción SQL (SQLite 3.0) que es unir dos tablas, los resultados son que tengo un registro por día con totales para el día, pero al unirlo a la tabla de idiomas, me da cinco registros por día, uno para cada idioma.

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

Sin embargo, Solo quiero un registro por día. y en lugar de que, por ejemplo, "francés" sean datos, quiero que sea un nombre de columna con el total de ese idioma como datos para esa columna.

¿Cómo puedo cambiar la instrucción SQL para obtener los totales de idioma en el mismo registro con los nombres de campo apropiados? p.ej:

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

enter image description here

Aquí están las tablas:

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)

preguntado el 31 de julio de 12 a las 11:07

Creo que olvidaste la instrucción SQL;) -

@EdwardTanguay Es una pena que no estés usando una plataforma compatible con PIVOT :) -

Interesante, no sabía que PIVOT estaba en SQL Server, pero una base de datos como archivo también tiene sus ventajas convenientes. :-)-

1 Respuestas

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 

Respondido 31 Jul 12, 11:07

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.