2012-07-31 32 views
1

我有以下連接兩個表的SQL語句(SQLite 3.0),結果是我每天有一個記錄,當天的總數,但加入到語言表中,它每天給我提供了五條記錄,每種語言一個。如何將JOIN中的多條記錄作爲列返回?

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 

然而,我想每天只有一條記錄,並代替例如「法語」是數據,我希望它是該語言的總數作爲該列的數據。

如何更改SQL語句,以便在具有相應字段名稱的相同記錄中獲得語言總數?例如: -

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

enter image description here

下面是表:

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

我想你忘記了SQL語句;) – SpaceBison 2012-07-31 10:14:42

+0

什麼樣的SQL平臺的? – podiluska 2012-07-31 10:17:49

+0

我正在使用SQLite 3. – 2012-07-31 10:19:18

回答

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