Access2000 Aggregatfunktionen und Unterabfragen

Wie muss eine SQL-Abfrage aussehen für folgende Situation:
Bei einem Sportfest werden 4 Disziplinen angeboten. Für das Ranking werden pro Teilnehmer die Summe seiner 3 besten Punktwertungen herangezogen.
Bsp:
Tln 1 hat 100,200,130,160 Pkte = 490 Pkte
Tln 2 hat 100,150,0,0 Pkte = 250 Pkte
Meine bisherigen Versuche waren alle fehlerhaft.

Hallo Ralf,

jetzt habe ich doch noch eine Lösung gefunden.

Tabellenname: Pkte
Tabellen-Aufbau: ID [Autowert], Schüler_ID [Long], Disziplin [Long], Punkte [Long].

SQL-Abfrage:
SELECT Top2MaxPkte.Schüler_ID, Sum(Top2MaxPkte.Punkte) AS SummevonPunkte
FROM [SELECT y1.Schüler_ID, y1.Punkte
FROM Pkte AS y1
WHERE y1.ID in
(
SELECT TOP 2 y2.ID FROM Pkte AS y2 WHERE y1.Schüler_ID = y2.Schüler_ID ORDER BY y2.Punkte DESC
)
ORDER BY y1.Schüler_ID, y1.Punkte DESC
]. AS Top2MaxPkte
GROUP BY Top2MaxPkte.Schüler_ID
ORDER BY Top2MaxPkte.Schüler_ID;

Jetzt werde ich noch untersuchen, ob die Abfrage vereinfacht werden kann.

Gruß
Wolf

Hi Wolf,

Jetzt werde ich noch untersuchen, ob die Abfrage vereinfacht
werden kann.

ich hab mal untersucht, ob sie richtige Ergebnisse liefert - das tut sie nur, wenn die Einzelergebnisse pro Schüler unterschiedlich sind :frowning:

Noch habe ich nicht ganz verstanden, was die Query macht.

Gruß Ralf

Hallo Ralf,

leider hast du recht. Ich habe aber bereits die Abhilfe gefunden:

Ausschnitt aus der Abfrage, ergänzt um ‚, y2.ID‘:

SELECT TOP 2 y2.ID FROM Pkte AS y2 WHERE y1.Schüler_ID = y2.Schüler_ID ORDER BY y2.Punkte DESC, y2.ID

Damit stimmt die Summe auch bei gleichen Einzelwerten.

Vielen Dank für deinen Hinweis.

Gruß
Wolf