WCM Forum

WCM Forum (http://www.wcm.at/forum/index.php)
-   Programmierung (http://www.wcm.at/forum/forumdisplay.php?f=17)
-   -   Access: Summe der 3 besten Ergebnisse... (http://www.wcm.at/forum/showthread.php?t=132254)

Loco 23.04.2004 21:49

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....

Jaguar 23.04.2004 23:02

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.

Loco 23.04.2004 23:22

Access 2002

Welches Format hat so eine TOP n Anweisung?

Jaguar 23.04.2004 23:31

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.

Loco 24.04.2004 06:00

Das ist nicht ganz die Lösung....

Zitat:

Angenommen, Sie möchten die Namen der besten 25 Schüler des Jahrgangs 1994 zurückgeben:
Was ich brauche, sind die besten Schüler/Sportler JEDES Jahrganges...

Zitat:

Das TOP-Prädikat wählt nicht zwischen identischen Werten
Das ist ein großes Problem... Wenn der 4. genauso viele Punkte wie der 3. hat, dann werden 4 statt in 3 in die Wertung genommen

Jaguar 24.04.2004 09:57

Zitat:

Original geschrieben von Loco
Das ist nicht ganz die Lösung....


Was ich brauche, sind die besten Schüler/Sportler JEDES Jahrganges...

.. dann gruppier halt danach von der auswertung.

Zitat:


Das ist ein großes Problem... Wenn der 4. genauso viele Punkte wie der 3. hat, dann werden 4 statt in 3 in die Wertung genommen

.. für diesen fall gibts das prozent. du hast doch immer 5 hast du geschrieben in einer mannschaft? dann nimm immer die top 3/5 prozent.

Loco 24.04.2004 13:39

Zitat:

Original geschrieben von Jaguar
.. dann gruppier halt danach von der auswertung.


.. für diesen fall gibts das prozent. du hast doch immer 5 hast du geschrieben in einer mannschaft? dann nimm immer die top 3/5 prozent.

TOP 3/5% nimmt aber immer die oberen 3/5% der Werte.

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....

Jaguar 24.04.2004 18:20

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...

Shadow 30.04.2004 13:54

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