1

2つのテーブルを結合している次のSQLステートメント(SQLite 3.0)があります。その結果、1日のレコードがあり、その日の合計がありますが、言語テーブルに結合すると、1日あたり5つのレコードが得られます各言語。

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

ただし、1日に1つのレコードのみが必要であり、たとえば「フランス語」をデータにするのではなく、その言語の合計をその列のデータとする列名にします。

適切なフィールド名を持つ同じレコードの言語合計を取得するようにSQLステートメントを変更するにはどうすればよいですか?例えば:

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

ここに画像の説明を入力してください

表は次のとおりです。

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)
4

1 に答える 1

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 
于 2012-07-31T10:18:42.397 に答える