2016-04-15 10 views
1

具体的には、(1)クラス、(2)割り当て、(3)生徒の姓で構成された成績のリストをLibreOffice Base [HSQLdb]から返すのに問題があります。等級割り当て[Zaption]データベース

私は(APIを持っていない[sadface])オンライン評定表にデータベースからグレードをコピーするスクリプトを実行することができますので、私はこの出力をしたい

私はこの問題のためにいくつかの原因があると考えられます:

  1. My relational structureは調整が必要な場合があります。

  2. 私は何らかの形で「学生ID」を実装する必要があります。 Zaptionでは、学生が使用する「ZaptionName」が何であれ、その投稿を行います。次に、示されている2番目のテーブルのZaptionNameとRosterFullNameを手動で一致させます。

  3. Zaptionでは、同じ割り当てで同じ「学生」が複数の提出を許可します。複数の提出が許可されているので、私はFilterLowMultiplesクエリを実行して、その学生のその課題の最高グレードを選択します。

FilterLowMultiples:

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

SelectAssignmentは、参考のために以下の通りです:デフォルトでは、割り当てがないようPullAssignmentGradesへ

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

私のクエリは、次のようであるが、割り当てによってソートは失敗しましたその学生が1つを提出しない限り、その行は空白であり、その学生はソートの一番下に落ちます。これは、私が実行する転送からオンラインへのスクリプトには悪いことです。

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

あなたは(所望の出力の最小まだ包括的な例を提供できます。オプションで、COALESCEと同様に0またはIの等級を割り当てる「GradedAssignments」テーブルから潜在的にNULL値はようにを使用することができます、割り当ての不足などのコーナーケース)出力例がそれ自体、学生が「ソートの一番下に落ちる」トランスファー・スクリプトにとって悪い理由に答えることができない場合は、そのロジックもよく知っているはずです。 – Thernys

+0

絶対に!単一の代入クエリの場合、ここに私の[現在の出力](http://i.imgur.com/szReIL7.png)がコピーされ、Calcに貼り付けられます。ここに私の[希望出力](http:// i。 imgur.com/wI0u9Il.png)。これで十分です。 –

+0

2つ以上の割り当てクエリがあるときに問題が発生します。[interwoven](http://i.imgur.com/Pit8nSb.png)ので、出力をWebグレードブックにスクリプトコピーできない、または非卒業生がウェブグレードブックの行がアルファベット順になっているので、スクリプトコピーを妨げる下部([実際にはトップ)](http://i.imgur.com/eL7uhdC.png) 'に落ちたとき。 –

答えて

1

あなたが特定の割り当てをしなかった学生を落とさないようSelectAssignmentのためにあなたのクエリでLEFT JOINを使用してください。 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

これは間違いなく答えであり、見落としてしまったことです。 –