Моя задача - экспортировать данные в CSV-файл. Я пытаюсь создать запрос перед экспортом данных в файл CSV. У каждого ученика есть уникальный идентификатор. На данный момент я могу экспортировать данные в разные таблицы отдельно и хорошо работать.Экспорт данных SQLite в CSV
Вот моя текущая схема:
1) Студент Таблица
studID | name | teacher | activity
SQ202 Mich Lisa Hearing Test
FG91A Lim Hanson Behavioural Test
2) Session Table (Каждый студент может иметь более одной сессии - не фиксированная)
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 будет содержать все данные из таблицы Student & Таблица сеанса, а также от соответствующего номера интервала и оценок из таблицы интервалов. Я попытался использовать внутренние соединения и разные запросы, но в этих строках все еще есть дублированные значения. Каждая ячейка должна содержать только одно значение, поэтому в этом случае я не буду конкатенации столбцов в моем запросе.
Вот что я хочу добиться:
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 или другой. Любая помощь или предложения будут очень благодарны. Спасибо.
Итак, каждая строка dest содержит Student + session + Interval1 + Interval2 + Interval3 + Interval4 data? – k3b
@ k3b Да, это правильно. – CourageousLemon
Глядя на это требование, я чувствую, что было бы лучше (с точки зрения производительности) делать форматирование в вашей программе, а не в SQLite. – PK20