Neuigkeiten:

Wenn ihr euch für eine gute Antwort bedanken möchtet, im entsprechenden Posting einfach den Knopf "sag Danke" drücken!

Mobiles Hauptmenü

alternierende Ergebnisanzeige aus zwei Berichten

Begonnen von hermann169, Oktober 28, 2014, 18:54:06

⏪ vorheriges - nächstes ⏩

hermann169

Hallo, ich habe 2 Berichte mit unterschiedlichen Ergebnissen.
1. Bericht Spalten: Name, Vorname, Blattl (Zahl)
2. Bericht Spalten: Name, Vorname, Ring (Zahl)
Wie kann ich in einem neuen Bericht alternierend (abwechselnd) in der ersten Zeile Name, Vorname, Blattl, dann in der nächsten Zeile Name, Vorname, Ring, dann wieder Blattl, anschl. wieder Ring usw. erstellen. Jeder Name incl. Vorname darf nur einmal aufgeführt werden.

Ich benutze Access 2013.
Für Eure Hilfe DANKE im voraus!
Hermann

MzKlMu

Hallo,
ein gruppierter Bericht könnte da helfen.
Wie sind die Tabellen aufgebaut ?
Gruß Klaus

hermann169

Hallo,
es gibt eine Tabelle mit Feldern: ID, Name, Vorname, Ring, Blattl, Schützen, Senioren.
Daraus wurden die Abfragen und dann die Berichte erstellt.
Gruß Hermann

MaggieMay

Hallo Hermann,

wenn das alles in einer Tabelle steht, brauchst du doch nur die Felder im Detailbereich untereinander zu setzen, anstatt nebeneinander.
Freundliche Grüße
MaggieMay

hermann169

Hallo,
das funktioniert leider nicht, da in beiden Berichten die gleichen Namen vorkommen.
Wenn aber der Name schon einmal in einer Wertung erscheint (bestplatzierte Wertung), darf er im Endbericht kein zweites mal erscheinen.

MaggieMay

Dann hast du dein Problem wohl noch nicht nachvollziehbar beschrieben. Versuche es doch noch einmal von vorne.
Freundliche Grüße
MaggieMay

hermann169

Es gibt eine Tabelle mit: ID, Name, Vorname, Ring, Blattl, Schützen, Senioren.
Über ein Formular werden die Ergebnisse eingetragen.Dann erfolgt eine Abfrage über
a) Name, Vorname, Schützen, Ring
b) Name, Vorname, Schützen, Blattl
Hiervon wird jeweils ein Bericht erstellt.
Ein dritter Bericht soll nun das automatische Ergebnis bringen von
1. Name, Vorname   25  (bestes Blattl)
2. Name, Vorname,  99  ( bestes Ergebnis Ring)
3. Name, Vorname   33  (2. bestes Blattl)
4. Name, Vorname   97  (2. bestes Ergebnis auf Ring)
5. Name, Vorname   47  (3. bestes Blattl)
6. Name, Vorname   96  (3. bestes Ergebnis auf Ring)
usw.
Die Zahlen hinter dem Vornamen sind Beispielszahlen.
Ergebnisse von Blattl sind aufsteigend (1 - 9999, je kleiner desto besser)
Ergebnisse von Ring sind absteigend (100 - 1, je größer desto besser)
Da aber die Schützen in jedem Bericht vorkommen (Blattl, Ring), fällt die schlechtere Platzierung weg. z. B. Wenn der Schütze Platz 4 bei den Ringen erreicht hat, darf er mit einem späteren Platz (z.B. Platz 26) auf Blattl nicht mehr in die Wertung einfließen.
Vielleicht ist es jetzt mehr verständlich.
Gruß Hermann

MaggieMay

Hallo Hermann,

ich habe mal ein Beispiel basierend auf deinen Angaben erstellt und hoffe, das hilft dir weiter.

Schau dir die Abfragen an, daraus sollte sich ein Bericht erstellen lassen.

Freundliche Grüße
MaggieMay

hermann169

Hallo MaggieMay,  :D
deine Abfragen sind super! Wie kann ich jetzt noch erreichen, dass die 2. Wertung der gleichen Person herausfällt. In deiner 2. Abfrage müsste jetzt der 2. "Adam" herausfallen, es zählt nur immer die bessere Platzierung einer Person, jeder darf in der Liste nur einmal aufgeführt sein.
DANKE, mit den besten Grüßen Hermann

MaggieMay

Dann würde aber doch das Bestergebnis einer Gruppe unter den Tisch fallen, ich kann mir nicht vorstellen, dass das so gewollt ist.
Freundliche Grüße
MaggieMay

hermann169

Hallo MaggieMay,
in diesem Endbericht zählt nur noch das beste Ergebnis der Person. Blatt vor Ring. Jede spätere Platzierung einer Person muß herausfallen, der nächstbeste rückt nach.
Viele Grüße Hermann

MaggieMay

#11
Ok, jetzt habe ich verstanden.
Ist keine schöne Lösung wie ich finde, aber es scheint zu funktionieren:
SELECT *
FROM (SELECT nachname, vorname, rang, pos, score,
        NZ(DCount("*","abf_kombi_wertung_1","s_id=" & s_id & " And (rang < " & rang & " Or rang = " & rang & " And pos < " & pos & ")"),0)+1 as lfn
        FROM abf_kombi_wertung_1) AS h
WHERE h.lfn = 1
Freundliche Grüße
MaggieMay

hermann169

Hallo MaggieMay,
das mit den Namen funktioniert, nur habe  ich jetzt in der Beispielauswertung einen Wechsel von Blatt und Rang ab der 4. Zeile.
Nochmals vielen Dank für Deine Hilfe!
Viele Grüße Hermann

hermann169

Hallo MaggieMay,
der Wechsel bezieht sich auf die Streichung des doppelten Namens, es müsste der nächstbeste nachrücken (Neuberechnung nach der Streichung?).
Viele Grüße Hermann

MaggieMay

Hallo Hermann,

ich habe einen Weg gefunden, auch wenn er ein bißchen umständlich erscheint, das Ergebnis sollte deinen Vorstellungen entsprechen. Basierend auf der zuvor eingestellten Beispiel-DB sind das im einzelnen folgende Abfragen:

abf_wertung_blatt: (erzeugt Rangfolge der Blattwertung ohne Duplikate)SELECT tbl_wertung.s_id, tbl_wertung.nachname, tbl_wertung.vorname, tbl_wertung.blatt AS score, NZ(DCount("*","tbl_wertung","blatt<" & [tbl_wertung].[blatt]),0)+1 AS rang, 1 AS pos
FROM tbl_wertung
WHERE not exists (select s.s_id from tbl_wertung as s where s.s_id = tbl_wertung.s_id and (s.blatt < tbl_wertung.blatt or s.blatt = tbl_wertung.blatt and s.id < tbl_wertung.id))
ORDER BY 5, 6;


abf_wertung_ring: (erzeugt Rangfolge der Ringwertung ohne Duplikate)SELECT tbl_wertung.s_id, tbl_wertung.nachname, tbl_wertung.vorname, tbl_wertung.ring AS score, NZ(DCount("*","tbl_wertung","ring>" & [tbl_wertung].[ring]),0)+1 AS rang, 2 AS pos
FROM tbl_wertung
WHERE not exists (select s.s_id from tbl_wertung as s where s.s_id = tbl_wertung.s_id and (s.ring > tbl_wertung.ring or s.ring = tbl_wertung.ring and s.id < tbl_wertung.id))
ORDER BY 5, 6;


abf_wertung_kombi: (führt die vorgenannten Abfragen zusammen, unter Ausschluss von Doppelwertungen zu einer Person)SELECT b.s_id, b.nachname, b.vorname, b.score, b.rang, b.pos
FROM abf_wertung_blatt AS b
WHERE NOT EXISTS (SELECT s_id From abf_wertung_ring AS r WHERE r.s_id = b.s_id and r.rang < b.rang)
UNION
SELECT r.s_id, r.nachname, r.vorname, r.score, r.rang, r.pos
FROM abf_wertung_ring AS r
WHERE NOT EXISTS (SELECT s_id From abf_wertung_blatt AS b WHERE b.s_id = r.s_id and b.rang <= r.rang)
ORDER BY 5, 6;


abf_wertung_auswertung: (Endauswertung mit neu berechneter Rangfolge)SELECT s_id, nachname, vorname, score, IIf(pos=1,NZ(DCount("*","abf_wertung_kombi","score<" & score),0)+1,NZ(DCount("*","abf_wertung_kombi","score>" & score),0)+1) AS rang, pos
FROM abf_wertung_kombi
ORDER BY 5,6;

Freundliche Grüße
MaggieMay