2016-04-15 27 views
1

Insbesondere habe ich Probleme, von LibreOffice Base [HSQLdb] eine Liste von Noten von (1) Klasse, (2) Zuordnung, (3) Nachnamen des Schülers organisiert zurückzukehren.Graded Assignment [Zaption] Datenbank

Ich möchte diese Ausgabe so kann ich ein Skript ausführen, die Noten aus der Datenbank zu einem Online-Notenbuch zu kopieren (was nicht eine API hat [sadface])

ich mehrere mögliche Ursachen für dieses Problem vermuten:

  1. My relational structure kann Zwicken müssen.

  2. Ich muss irgendwie eine "Studenten-ID" implementieren. Auf Zaption stellen die Schüler ihre Einsendungen unter dem von ihnen gewählten "ZaptionName" zur Verfügung. Dann passe ich manuell ZaptionName an RosterFullName in der zweiten angezeigten Tabelle an.

  3. Zaption erlaubt mehrere Einreichungen vom gleichen "Schüler" für die gleiche Aufgabe. Da mehrere Übermittlungen zulässig sind, führe ich eine FilterLowMultiples-Abfrage aus, um die höchste Bewertung für diese Aufgabe für diesen Schüler auszuwählen.

FilterLowMultiples:

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

SelectAssignment ist unten als Referenz:

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

Meine Abfrage PullAssignmentGrades ist wie folgt, aber nicht durch Abtretung Sortierung, da es standardmäßig keine Zuordnung ist es sei denn, dieser Student hat einen eingereicht, also ist die Zeile leer und der Student fällt auf den unteren Rand der Sortierung, was für das von mir ausgeführte Online-Transfer-Skript schlecht ist.

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 
+0

Können Sie ein minimal noch umfassendes Beispiel der gewünschten Ausgabe liefern einschließlich Sortierung. , und Eckfälle wie fehlende Zuordnung Noten)? Wenn das Ausgabebeispiel nicht selbst beantwortet, warum es für Ihr Übertragungsskript schlecht ist, dass die Schüler auf den Grund der Sortierung fallen, dann wäre diese Logik gut zu wissen. – Thernys

+0

Absolut! Für eine einzelne Zuweisung Abfrage, hier ist meine [aktuelle Ausgabe] (http://i.imgur.com/szReIL7.png), kopiert und in Calc eingefügt, und hier ist meine [gewünschte Ausgabe] (http: // i. imgur.com/wI0u9Il.png). Das funktioniert gut genug. –

+0

Das Problem für mich entsteht, wenn ich zwei oder mehr Zuordnungsabfragen habe, entweder [interwoven] (http://i.imgur.com/Pit8nSb.png), so dass ich nicht einfach die Ausgabe in das Web-Zensuren-Skript kopieren konnte oder wenn Nicht-Übergeber "nach unten" [(eigentlich oben)] fallen (http://i.imgur.com/eL7uhdC.png), was auch die Skript-Kopie stört, da die Zeilen des Web-Notenbuchs alphabetisch geordnet sind. –

Antwort

1

ein LEFT JOIN in Ihrer Anfrage für SelectAssignment verwenden, damit Sie nicht Studenten fallen, die nicht eine bestimmte Zuordnung zu tun haben. Optional können Sie COALESCE auf den potenziell NULL Werte aus dem „GradedAssignments“ Tabelle verwenden, um einen Grad von 0 oder I. Wie so zuzuordnen: (esp

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') 
+0

Das ist definitiv die Antwort, und es ist etwas, das ich übersehen hatte, jetzt muss ich nur herausfinden, wie es implementiert wird. –