Ich habe diesen Code und seine temporären Tabellen, damit Sie ihn ausführen können.
%Vor%So wie du sehen kannst, habe ich Uzumaki Naruto nur 1 Punkt, weil er nur eine richtige Antwort hat und sowohl Sakura als auch Sasuke hat jeweils 3 Punkte.
Jetzt möchte ich, dass es so ist:
%Vor%Er hat 6 bekommen, weil ich in meiner #quiz Tabelle Punkte addiert habe (es sind Punkte für jede Anzahl von Items wert).
Also, ich habe mich gefragt, ob die Gruppenklausel dazu nötig ist? und was ist die richtige summierung, ich will, dass, wenn True = True dann fügt es 1 punkt und False = False same und False = True zählt nicht.
Hier ist mein Versuch
%Vor% Ich bin mir nicht sicher, was deine Frage hier ist. @JorgeCampos ist nicht ganz korrekt, da ein GROUP BY
nur benötigt wird, wenn Sie erschwerte und nicht-aggregierte Felder im selben Datensatz zurückgeben (ohne die Verwendung einer OVER
-Klausel).
Was das Ergebnis betrifft, bin ich mir nicht ganz sicher, wie Sie zu dem Ergebnis gekommen sind, das Sie getan haben. Der Wert von points_worth liegt in Ihrer Quiz-Tabelle, nicht in der Untersuchungstabelle. Daher nehme ich an, dass jede Frage denselben Wert für das Quiz hat. Wenn ja, ist dies eine Idee für Ihre Abfrage:
%Vor%Wir könnten jedoch ein wenig weiter gehen und sehen, ob ein Student tatsächlich alle Fragen beantwortet (und diejenigen ausschließt, die keine beantwortet haben), also erhalten wir:
%Vor%Ich hoffe, das hilft.
Fügen Sie eine Bedingung innerhalb der sum
hinzu. Ich habe auch bemerkt, dass die Verknüpfung zu #student_taken
zu #exam
nicht korrekt funktioniert, weil Sie nur quiz_id
beitreten Sie müssen auch bei sequence
beitreten.
Also hier ist dein Versuch mit diesen Modifikationen:
%Vor% Die Funktion IIF
wertet den ersten Parameter als Bedingung aus, gibt den zweiten Parameter zurück, falls true, und den dritten Parameter, falls false. Wenn der Student also die Erwartungen der Prüfung ( ST.answer = E.answer
) beantwortet, gibt er die Punktewerte zurück, sonst 0.
Wenn Sie IIF
nicht verwenden möchten, können Sie eine case-Anweisung verwenden: case when ST.answer = E.answer then Q.points_worth else 0 end
. Ich persönlich denke nur, IIF
sieht sauberer aus, und SQL Server Management Studio geht ein bisschen verrückt mit Syntaxhinweisen, wenn Sie eine Case-Anweisung durcheinander bringen.
Tags und Links sql sql-server