2015-10-20 177 views
1

我的任務是將數據導出到CSV文件。我試圖在將數據導出到CSV文件之前生成一個查詢。每個學生都有一個唯一的ID。就目前而言,我可以單獨導出不同表格中的數據,並且運行良好。將SQLite數據導出爲CSV

這是我目前的架構:

1)學生表

studID | name | teacher | activity 
SQ202  Mich  Lisa Hearing Test 
FG91A  Lim  Hanson Behavioural Test 

2)會話表(每個學生都可以有多個會話 - 不固定)

studID | startTime | endTime | sessionNo | status 
SQ202  10:00  10:40  1  Completed 
SQ202  13:00  13:50  2  Completed 
FG91A  14:20  15:00  1  Completed 

3 )間隔表(每個會話可以有四個以上的間隔 - 不固定)

studID |sessionNum |intervalNo | score 
SQ202  1   1  10/10 
SQ202  1   2  7/10 
       . 
       . 
       . 

這是我從一個特定的表中導出數據:

File exportDir = new File(Environment.getExternalStorageDirectory(), ""); 
if (!exportDir.exists()) { 
    exportDir.mkdirs(); 
} 

file = new File(exportDir, 「ChildObservation" + " (D)" + date + " (T)" + time +".csv"); 
try { 

    file.createNewFile(); 
    CSVWriter csvWrite = new CSVWriter(new FileWriter(file)); 


    // sqlite core query 
    SQLiteDatabase db = myNewGradingDB.getReadableDatabase(); 
    Cursor curChild = db.rawQuery("SELECT * FROM Student ORDER BY name", null); 
    csvWrite.writeNext(「Student ID」, 「Name」, 「Teacher」, 「Activity"); 

    while (curChild.moveToNext()) { 

    String arrStr[] = { 
     curChild.getString(0), curChild.getString(1), 
     curChild.getString(2), curChild.getString(3), 
}; 
csvWrite.writeNext(arrStr); 
} 

csvWrite.writeNext(); 
csvWrite.close(); 
return true; 
} 

catch (IOException e) { 
    Log.e(「Child", e.getMessage(), e); 
    return false; 
}  

然而,我的目標是檢索和顯示在單行綁在學生中的所有數據。導出的Excel工作表中的每一行都將包含來自學生表&會話表的所有數據以及來自間隔表的相應間隔編號和分數。我嘗試過使用內部連接和不同類型的查詢,但在這些行中仍然存在一些重複的值。每個單元格只能包含一個值,因此在這種情況下,我將無法連接查詢中的列。

這裏是我想達到的目標:

studID | name | teacher | activity  | startTime | endTime | sessionNo | status | intervalNo | score | intervalNo | score ... (repeat intervalNo and score) 
SQ202 Mich Lisa  Hearing Test  10:00  10:40  1   Completed  1   10/10  2  7/10 ... 
FG91A Lim  Hanson Behavioural Test 12:30  1:40  2   Completed  1   8/10  2  6/10 ...   

在這個階段,它不可能爲我改變數據庫設計。也許有其他方法可以解決這個問題,無論是通過SQL還是其他方式。任何幫助或建議將不勝感激。謝謝。

+0

因此,每個dest行包含Student + session + Interval1 + Interval2 + Interval3 + Interval4數據? – k3b

+0

@ k3b是的,這是正確的。 – CourageousLemon

+0

看着這個需求,我覺得在程序中做格式化會更好(性能明智),而不是SQLite。 – PK20

回答

0

如果你想要一個SQL唯一的解決辦法,然後 的伎倆來解決你的問題是使用別名

select 
    st.studID, st.name, 
    se.startTime, 
    i1.intervalNo as intervalNo1, i1.score as score1, 
    i2.intervalNo as intervalNo2, i2.score as score2, 
    i3.intervalNo as intervalNo3, i3.score as score3, 
    i4.intervalNo as intervalNo4, i4.score as score4 

from Student as st 
    left join Session as se on st.studID = se.studID 
    left join Interval as i1 on st.studID = i1.studID and i1.sessionNo=1 
    left join Interval as i2 on st.studID = i2.studID and i2.sessionNo=2 
    left join Interval as i3 on st.studID = i3.studID and i3.sessionNo=3 
    left join Interval as i4 on st.studID = i4.studID and i4.sessionNo=4 

,但是這隻能加入間隔表幾次,如果你事先知道有多少interval- s有