Neuigkeiten:

Ist euer Problem gelöst, dann bitte den Knopf "Thema gelöst" drücken!

Mobiles Hauptmenü

Abfrage Top 3 mit Zähler

Begonnen von Chiefhenk, Januar 20, 2025, 09:08:10

⏪ vorheriges - nächstes ⏩

Chiefhenk

Guten Morgen

Ich habe folgendes Problem.
In meiner Event Datenbank wurde der Wunsch geäussert ein Diplom zu drucken, dass Name Vorname und nach dem Ergebnis der Leistung die besten drei druckt.

Name Vorname 1. Rang ¦¦  Name Vorname 2. Rang ¦¦  Name Vorname 3. Rang

Die Abfrage dazu habe ich soweit erstellen können, so dass die besten 3 zu jedem Lauf und Gruppe angezeigt werden.

Was ich nicht hinkriege ist die Benennung 1. 2. 3. Rang

Ich habe eine Basis Query die die Daten nach Lauf und Gruppe filtert.
Dazu gibt es dann die Query Top 3 die nur die drei besten anzeigt.

SELECT TOP 3 Qry_top3_Basis.SC_EventName, Qry_top3_Basis.SC_EventLaufName, Qry_top3_Basis.SC_Gruppe, Qry_top3_Basis.Ergebnis, Qry_top3_Basis.SC_Nachname, Qry_top3_Basis.SC_Vorname, Count(0)+1 AS tracker
FROM Qry_top3_Basis
GROUP BY Qry_top3_Basis.SC_EventName, Qry_top3_Basis.SC_EventLaufName, Qry_top3_Basis.SC_Gruppe, Qry_top3_Basis.Ergebnis, Qry_top3_Basis.SC_Nachname, Qry_top3_Basis.SC_Vorname;

Das funktioniert soweit und die 3 werden angezeigt.

Beim Count scheitere ich, da zeigt es im Moment bei allen 3 (2) an.
Wie kann ich das lösen dass ich da 1 2 oder 3 angezeigt bekomme oder
hat jemand eine Idee, dass ich da ein Feld mehr Erhalte wo dann jeweils 1. Rang usw. drinsteht?


Chiefhenk

Hallo Christian

Danke für die Links
Ich habe die Lösung inzwischen gefunden.

Zur Erklärung der Abfrage (Qry_top3_Basis):
Die Abfrage besteht aus drei verknüpften Tabellen

SCEvent = Eventdaten Veranstalltungsort
Qry-Berechnung = berechnete Daten Personen und mehrere Jury Auswertungen.
SCPerson = Personendaten

Verknüpfung SCEvent --> Qry_Berechnung <-- SCPerson

SELECT TOP 3 Qry_berechnung.SC_EventLaufID, SCEvent.SC_EventID, SCEvent.SC_EventName, Qry_berechnung.SC_Eventid, Qry_berechnung.SC_EventLaufName, Qry_berechnung.SC_Gruppe, Qry_berechnung.SC_Ergebnis, Qry_berechnung.Ergebnis, SCPerson.SC_Nachname, SCPerson.SC_Vorname, DCount("ergebnis","qry_top3_basis","ergebnis>" & [ergebnis])+1 & ". Rang" AS LaufNummer1
FROM SCPerson INNER JOIN (SCEvent INNER JOIN Qry_berechnung ON SCEvent.SC_EventID = Qry_berechnung.SC_Eventid) ON SCPerson.SC_PersonID = Qry_berechnung.SC_PersonID
WHERE (((SCEvent.SC_EventName)=VARDruckEventname()) AND ((Qry_berechnung.SC_EventLaufName)=VAREventLaufName()) AND ((Qry_berechnung.SC_Gruppe)=VARGruppe()))
ORDER BY Qry_berechnung.Ergebnis DESC;

Der wichtige Teil ist dieser:
In der Abfrage ein Feld anhängen mit folgendem Code.
LaufNummer1: DomAnzahl("ergebnis";"qry_top3_basis";"ergebnis>" & [ergebnis])+1 & ". Rang"

Nun funktioniert die Abfrage und es zeigt dann beim ersten "1. Rang" beim zweiten "2. Rang" usw. an.
Will man eine grössere range, so kann man einfach SELECT TOP 3 zb auf SELECT TOP 5 setzen. Dann werden die 5 besten angezeigt.

Eine Eigenart hat das ganze

Wenn es mehrere gleiche Ergebnisse gibt, dann sieht das dann folgendermassen aus.

Wert    Anzeige
30.5    1. Rang
30.5    1. Rang
29.0    3. Rang
--------
31.67    1. Rang
30.33    2. Rang
30.33    2. Rang
--------
30.1    1. Rang
29.8    2. Rang
29.6    3. Rang

In den ersten 2 Beispielen, muss man sich dann überlegen ob man die Punktevergabe minimal verändert,
So das wirklich 3 verschieden Werte entstehen.




Bitsqueezer

Hallo,

was ja auch prinzipiell richtig ist - wenn beide die gleiche Punktzahl haben, haben sie ja auch den gleichen Platz verdient. Bei einem Wettkampf wäre es dann ja unfair, wenn einer nur deswegen eine höhere Punktzahl erreicht, weil er eine kleinere ID gehabt hat... :)

Gruß

Christian

Chiefhenk

Hallo Christian

Das geht nicht über die ID sondern über eine Zahl die im Feld Ergebnis steht.
Die Reihenfolge von 2 Gleichen Werten hat nichts mit der Grösse der ID zu tun und geschieht willkürlich.
Das minimal korrigieren macht Sinn wenn der Veranstalter unbedingt 3 Ränge braucht.

Wenn platz 3 und 4 den gleichen Wert hat, was dann?
Was ist wenn nicht vorgesehen ist, das es 2x Platz 3 gibt?

So einfach ist das dann doch nicht.

Bitsqueezer

Hallo,

das ist aber ein Business-Problem und kein programmiertechnisches. Dazu muß man sich halt beratschlagen und erst mal die einzelnen Fälle festlegen. Die ID war natürlich nur ein Beispiel - selbst wenn es ein zufälliges Reihenfolgeergebnis war - wenn zwei Personen genau das gleiche in jedwedem Spiel erreichen und es sich nicht über eine zeitliche Reihenfolge lösen läßt, kann man den einen nicht dem anderen bevorzugen. Selbst wenn es 10 Personen mit gleichem Ergebnis ist. Daher: Es muß bei gleicher Punktzahl in einem Spiel immer geregelt werden, was dann passieren soll, bevor man sich an eine Programmierumsetzung macht.

Gruß

Christian