SQL Server fügt eine Punktzahl hinzu, wenn eine Antwort die gleiche ist wie die richtige Antwort mit der Klausel group by

8

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%     
SCrub 11.01.2018, 11:52
quelle

3 Antworten

9

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.

    
Larnu 11.01.2018, 12:13
quelle
2

Sie können diese Methode ausprobieren: Finden Sie, wie viele korrekte Punkte / Schüler (Abfrage innerhalb von CTE) und nehmen Sie dann Ergebnis und verbinden Sie die Tabelle #quiz , um die endgültigen Punkte zu berechnen, indem Sie die points_worth

anwenden %Vor%     
Valerica 11.01.2018 12:12
quelle
2

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.

    
Kris Lawton 11.01.2018 12:11
quelle

Tags und Links