Komplizierte Abfrage

Hallo!

Für unser Schulfussballturnier habe ich eine Access (XP) Datenbank erstellt. Jetzt hätte ich eine Frage bezüglich einer Abfrage:

In der Tabelle ‚Spiel‘ sind die Felder SpielID, GruppenID und Datum vorhanden.
Dazu gibt es einer weitere Tabelle mit dem Namen ‚Teilnahme‘. In dieser gibt es die Felder TeilnahmeID, SpielID, TeamID, Tore und Punkte.

So gibt es für jedes Spiel zwei Datensätze in der Tabelle ‚Teilnahme‘, für jede Mannschaft einen Eigenen.
Wenn ich jetzt mit einer Abfrage die Endtabelle erstellen will, kann ich ja einfach die geschossenen Tore und die ereichten Punkte pro Mannschaft zusammenzählen.
Wie komme ich jetzt aber an die kassierten Tore?

mfg
chris

Hi,

So gibt es für jedes Spiel zwei Datensätze in der Tabelle
‚Teilnahme‘, für jede Mannschaft einen Eigenen.
Wenn ich jetzt mit einer Abfrage die Endtabelle erstellen
will, kann ich ja einfach die geschossenen Tore und die
ereichten Punkte pro Mannschaft zusammenzählen.
Wie komme ich jetzt aber an die kassierten Tore?

Daran siehst du, daß dein Datenmodell nicht die Realität abbildet, die es darstellen soll. Sicherlich läßt sich eine komplizierte Abfrage basteln, die dir das gewünschte Ergebnis liefert - aber warum?

Ändere dein Datenmodell. In einem Fußballturnier interessiert nicht nur, welche Mannschaft teilgenommen hat, sondern vor allem die Spielpaarungen mit den jeweiligen Ergebnissen. Speicherst du diese, brauchst du dann keine Verrenkungen, um der Datenbank die Informationen zu entlocken.

Gruß

Sancho

Hi chris,

so hätte ich das Ganze nicht modelliert. Für jedes Spiel zwei Einträge namens Teilnahme ist ein wenig ungeschickt, weil das Spiel genau zwei Teilnehmer hat - nie mehr und nie weniger. Dein Modell realisiert eine 1:n-Beziehung, in der n immer 2 ist, also konstant.

Sei’s drum, warum soll der Sportspringer nicht auch mal einen Palstek in die Reißleine hüpfen:

SELECT a.team, Sum(b.geschossen) AS bekommen
FROM SELECT a.spiel, a.team, a.geschossen, b.team, b.geschossen
FROM Teilnahme AS a, Teilnahme AS b
WHERE a.Team in
(Select distinct Team
from Teilnahme)
and a.spiel = b.spiel
and a.team b.team
ORDER BY a.team
GROUP BY a.team;

Was wäre das alles einfach, wenn die Tore beim Spiel stünden…

Gruß Ralf

Hallo.

Die Ergebnisse eines Spiels setzen sich doch immer so zusammen, dass die eine Mannschaft x Tore schießt und die andere y. Weitere Daten solltest Du gar nicht in Deinen Tabellen speichern - es lässt sich alles berechnen. Und dass Du berechnete Felder nicht in Tabellen ablegen solltest, weißt Du doch …?

Beispiel : Mannschaft A - Mannschaft B Ergebnis x : y

Falluntersuchung :

x>y => A 2/3 Punkte, B 0
x=y => A 1 Punkt, B 1
x A 0 Punkte, B 2/3

Mehr gibt es doch nicht?

Gruß kw

Hallo,

in der Annahme, dass mit kassierten Toren die Tore der Gegenmannschaft
gemeint sind (bin absolut kein Fußballfan!).

Man muss nicht gleich mit Kanonen auf Spatzen schiessen.
Es geht auch mit dieser Tabellenstruktur.

Helfen könnte hier der folgende Trick:

  • neue Abfrage, 2 x die gleiche Tabelle Spiel hinzufügen
  • damit haben wir Spiel und Spiel_1
  • auf SpielID in Spiel tippen und mit gedrückter Maus Linie zu SpielID in Spiel_1 ziehen
  • aus Spiel die Felder TeilnahmeID, SpielID und TeamID runterziehen
  • für TeamID unter Kriterien eintragen: [Spiel_1].[TeamID]
    (damit schließen wir die Tore des eigenen Team aus)
  • Feld Tore aus Spiel_1 (nicht aus Spiel !) runterziehen
  • ausführen

MfG Ilona Kawgan

Hallo!

Ich sehe schon, mein Datenmodell ist nicht wirklich gut gelungen. Könnt ihr mir einen besseren Vorschlag machen?

Folgendes soll in der Datenbank vorhanden sein: Aus welchen Schüleren (und deren Klassen) sich die Mannschaften zusammen setzen und wann die Teams in welchen Gruppen gegeneinander spielen.
Der Einfachheithalber habe ich die Finalspiele ebenfalls als Gruppenspiele angesehen, eine andere Lösung ist mir nicht eingefallen.

Schlussendlich sollen dann die Gruppenabschlusstabellen aus den vorher eingegebenen Ergebnissen erstellt werden.

Vielen Dank
mfg
chris

Hi Chris,

Ich sehe schon, mein Datenmodell ist nicht wirklich gut
gelungen. Könnt ihr mir einen besseren Vorschlag machen?

die Wurzel allen Übels ist das Weib die Tabelle „Teilnahme“: Damit schaffst Du es, ein Spiel auf zwei scheinbar unabhängige Zeilen zu verteilen. Anschließend musst Du die beiden Zeilen mühsam wieder zusammenführen (Select from Teilnahme a, Teilnahme b …), um damit wieder ein Spiel abzubilden. Also erstmal Teilnahme wegschmeißen, 2 Teams und ihre jeweiligen Tore beim Spiel eintragen.

Folgendes soll in der Datenbank vorhanden sein: Aus welchen
Schülern (und deren Klassen) sich die Mannschaften zusammensetzen

Team \> Schüler
Klasse \> Schüler

und wann die Teams in welchen Gruppen gegeneinander spielen.

Spiel (Spiel, Team1, Team2, Datum, Ort)

Der Einfachheithalber habe ich die Finalspiele ebenfalls als
Gruppenspiele angesehen

Der Begriff „Gruppe“ ist reichlich nebulös; er wird ja nur benutzt, um die Tabelle „Spiele“ aufzubauen und wird dann vergessen. Wichtiger wäre die Einteilung in Vorrunde, Viertel-, Halb- und Finale. Also:

Spiel (Spiel, Team1, Team2, Datum, Ort, Runde)

Schlussendlich sollen dann die Gruppenabschlusstabellen aus
den vorher eingegebenen Ergebnissen erstellt werden.

Die Gruppenabschlusstabellen sind keine Datenbanktabellen, sondern einfache Auswertungen.

Gruß Ralf