1

最具体地说,我无法从 LibreOffice Base [HSQLdb] 返回按 (1) 班级、(2) 作业、(3) 学生姓氏组织的成绩列表。

我想要这个输出,这样我就可以运行一个脚本来将成绩从数据库复制到在线成绩册(没有 API [sadface])

我怀疑这个问题有几个可能的原因:

  1. 我的关系结构可能需要调整。

  2. 我不知何故需要实现一个“学生证”。在 Zaption 上,学生们在他们选择使用的任何“ZaptionName”下进行提交。然后,我在显示的第二个表中手动将 ZaptionName 与 RosterFullName 匹配。

  3. Zaption 允许同一“学生”多次提交同一作业。因为允许多次提交,所以我运行 FilterLowMultiples 查询来为该学生选择该作业的最高成绩。

过滤器低倍数:

SELECT MAX( "Grade" ) "Grade", "RosterFullName",
"Assignment", MAX( "ZaptionName" ) "ZapName"
FROM "SelectAssignment"
GROUP BY "RosterFullName", "Assignment"

SelectAssignment 如下供参考:

SELECT "GradedAssignments"."Assignment", "Roster"."RosterFullName",
"GradedAssignments"."Grade", "ZaptionNames"."ZaptionName"
FROM "Roster", "ClassIndex", "GradedAssignments", "ZaptionNames"
WHERE "Roster"."Class" = "ClassIndex"."Class"
AND "GradedAssignments"."ZaptionName" = "ZaptionNames"."ZaptionName"
AND "ZaptionNames"."RosterFullName" = "Roster"."RosterFullName"
AND ( "GradedAssignments"."Assignment" = 'YouKnowWhatever')

我对 PullAssignmentGrades 的查询如下,但按作业排序失败,因为默认情况下没有作业,除非该学生提交了作业,因此该行为空白,该学生落在排序的底部,这对转移不利-我运行的在线脚本。

SELECT "Roster"."RosterFirstName", "ClassIndex"."Class",
"Roster"."RosterFullName", "ClassIndex"."ClassLevel",
"FilterLowMultiples"."Grade", "FilterLowMultiples"."ZapName",
"FilterLowMultiples"."Assignment", "FilterLowMultiples"."Grade",
"FilterLowMultiples"."Assignment", "ClassIndex"."ClassDisplayOrder",
"Roster"."RosterLastName"
FROM "ClassIndex", "FilterLowMultiples", "Roster"
ORDER BY "Roster"."RosterFirstName" ASC,
"FilterLowMultiples"."Grade" DESC,
"FilterLowMultiples"."Assignment" ASC,
"ClassIndex"."ClassDisplayOrder" ASC,
"Roster"."RosterLastName" ASC
4

1 回答 1

1

在查询中对 SelectAssignment使用 a LEFT JOIN,这样您就不会放弃没有完成特定作业的学生。或者,您可以使用“GradedAssignments”表中COALESCE的潜在NULL值来分配 0 或 I 的等级。像这样:

SELECT 'YouKnowWhatever' AS "Assignment", "Roster"."RosterFullName",
  COALESCE("GradedAssignments"."Grade",0), "ZaptionNames"."ZaptionName"
FROM "Roster"
  INNER JOIN "ClassIndex" ON "Roster"."Class" = "ClassIndex"."Class"
  INNER JOIN "ZaptionNames" ON "ZaptionNames"."RosterFullName" = "Roster"."RosterFullName"
  LEFT JOIN "GradedAssignments" ON ("GradedAssignments"."ZaptionName" = "ZaptionNames"."ZaptionName" 
    AND "GradedAssignments"."Assignment" = 'YouKnowWhatever')
于 2016-04-15T15:27:41.483 回答