![]() |
Access: Summe der 3 besten Ergebnisse...
Ich habe folgendes Problem:
Bei der Auswertung von Bewerben (Sportschießen) gibt es eine Mannschaftswertung. Jede Mannschaft besteht aus 5 Mann, die Punktzahl der Mannschaft ergibt sich jedoch aus der Summe der drei besten Schützen. In einer Tabelle habe ich die Felder: Name - ist klar Mannschaftsname – ist auch klar S1 S2 ... S10 – der 1 bis 10 Einzelschuß des Schützen, enthält den Wert 0 bis 10 SG – Summe von S1 bis S10 also die Gesamtpunktzahl (wird bei der Eingabe von S1 bis S10 erzeugt). Der Schütze hat also 0 bis 100 Punkte Wie schaffe ich nun eine Mannschaftswertung? Ich habe es geschafft, einen Bericht zu erstellen, der die Schützen gruppiert nach Mannschaft anzeigt und die Punkte ALLER Schützen werden addiert. Das wäre ja der richtige Weg. Aber wie schaffe ich es, PRO MANNSCHAFT NUR DIE 3 SCHÜTZEN MIT DER HÖCHSTEN PUNKTEZAHL ZU NEHMEN, also die schlechteren zwei zu ignorieren.... |
Welche Access Version? Sollte es eine halbwegs neue sein solltest du für SQL auch die TOP n Funktion haben. In deinem Fall wäre das dann ein Select der TOP 3 pro Mannschaft.
|
Access 2002
Welches Format hat so eine TOP n Anweisung? |
Wie hieß es bei mir immer so schön im Informatikunterricht: "Die Hilfe ist rechts oben" ;).
Hättest du dir mal die Access Hilfe etwas genauer zu dem Thema angesehen hättest du sowas in der Art gefunden: TOP n [PERCENT] Gibt eine bestimmte Anzahl von Datensätzen zurück, die im durch eine ORDER BY-Klausel angegebenen oberen oder unteren Bereich liegen. Angenommen, Sie möchten die Namen der besten 25 Schüler des Jahrgangs 1994 zurückgeben: SELECT TOP 25 Vorname, Nachname FROM Schüler WHERE Schulabschlussjahr = 1994 ORDER BY Abschlussgesamtnote DESC; Wenn Sie die ORDER BY-Klausel nicht verwenden, gibt die Abfrage willkürlich 25 Datensätze, die die WHERE-Klausel erfüllen, aus der Tabelle Schüler zurück. Das TOP-Prädikat wählt nicht zwischen identischen Werten. Wenn im vorherigen Beispiel die 25. und 26. beste Abschlussgesamtnote identisch sind, gibt die Abfrage 26 Datensätze zurück. Sie können aber auch mit dem reservierten Wort PERCENT einen bestimmten Prozentsatz von Datensätzen zurückgeben, die im durch eine ORDER BY-Klausel angegebenen oberen oder unteren Bereich liegen. Angenommen, Sie möchten statt den besten 25 Schülern die schlechtesten 10 % der Schüler des Jahrgangs zurückgeben: SELECT TOP 10 PERCENT Vorname, Nachname FROM Schüler WHERE Schulabschlussjahr = 1994 ORDER BY Abschlussgesamtnote ASC; Mit dem ASC-Prädikat werden die unteren Werte zurückgegeben. Nach der TOP-Anweisung muss eine ganze Zahl ohne Vorzeichen folgen. TOP hat keine Auswirkung darauf, ob die Abfrage aktualisiert werden kann. |
Das ist nicht ganz die Lösung....
Zitat:
Zitat:
|
Zitat:
Zitat:
|
Zitat:
Wenn also Team A: 12,11,12,9,7 Punkte hat und Team B: 19,18,17,16,15, dann berücksichtigt TOP zuviele Werte von Team B, die sie höher sind als die von Team A. Der Bericht sollte ergeben: Platz 1: Team B 19+18+17 Punkte Platz 2: Team A 12+12+11 Punkte Ich kriege das einfach nicht hin.... |
ich kann mich nur wiederholen:
a.) GRUPPIEREN NACH den einzelnen TEAMS (wenn du ne Topauswertung über alle machst kann ja nix vernünftiges rauskommen) b.) top PRO team c.) davon die summe d.) die summe der einzelnen teams abfragen und sortieren... |
Hatte auch schon ein ähnliches Problem.
Die TOP-Funktion ist in so einem Fall unbrauchbar (gibt es eigentlich einen Fall, wo sie nicht unbrauchbar ist? ;) ), da bei einem Gleichstand zwischen dem 3. und 4. Teilnehmer die Funktion TOP 3 ein Ergebnis von 4 Datensätzen liefert, was bei einer Summenberechnung der Punktezahl fatal wäre. Um in meiner Datenbank schnell auf die TOP Datensätze zugreifen zu können werden sie mittels VBA in einem speziellen Feld markiert (das Programm läuft nach der Eingabe/Aktualisierung eines Datensatzes automatisch los und markiert die "ECHTEN" TOP 3 welche für spätere Abfragen/Berechnungen gebraucht werden. Oder du schreibst dir eine spezielle Summenfunktion, die du im Bericht für jede Mannschaft aufrufst... so zum Beispiel: Function SummeTop3(Mannschaft As String) As Integer Dim rs As Recordset, x As Integer, Su As Integer Set rs = CurrentDb.OpenRecordset("SELECT * FROM Tabelle1 WHERE Mannschaftsname='" & Mannschaft & "' ORDER BY [SG] DESC;") x = 1 Su = 0 rs.MoveFirst While (Not rs.EOF) And x < 4 Su = Su + rs!SG x = x + 1 rs.MoveNext Wend rs.Close SummeTop3 = Su End Function |
Alle Zeitangaben in WEZ +2. Es ist jetzt 10:58 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
© 2009 FSL Verlag