Hallo erstmal,
wie erstelle ich eine Abfrage für einen Spieler (hier : Berti), in der die komplette Tabelle durchsucht werden soll, und nur die Punkte für Berti addiert werden ? Diese sollen dann in eine neue Tabelle "Berti" angefügt werden.
Bisher hab ich das so geregelt, dass ich für die Tabelle "Final Table Ergebnisse" (Platz 1 - 9) jeweils für Unikate 9 Abfragen habe und für Duplikate auch 9 Abfragen. So ermittle ich Name und Datum, die dann an die Spieler-Tabelle angefügt werden. Im Anschluss folgen nochmal pro Spieler je 9 Anfüge-Abfragen für die Platzierung, bei welcher die Punkte ermittelt werden und in die Spieler-Tabelle angefügt werden.
Bei nun mittlerweile über 400 Spielern erscheint mir mein Verfahren etwas zu aufwendig...das geht bestimmt einfacher ?
Die Endtabelle sollte in etwa so aussehen (soll alles anhand der eingegebenen Ergebnisse automatisch ermittelt werden):
Platzierung Spielername Punkte
1 XYZ 140,5
2 FGH 139
. ... ...
. ... ...
Ich hoffe, es ist verständlich, im Anhang die Tabelle 'Final Table Ergebnisse', aus der die Daten berechnet werden sollen.
Vielen Dank schonmal im Voraus
[Anhang gelöscht durch Administrator]
Hallo,
eine über die Spieler gruppierte Abfrage liefert für jeden Spieler automatisch dessen Gesamtpunkte. Diese Abfrage kannst Du nach Namen filtern.
ZitatDiese sollen dann in eine neue Tabelle "Berti" angefügt werden.
Für jeden Spieler eine eigene Tabelle halte ich für den falschen Weg.
Die beschriebene Abfrage reicht aus.
Zitateine über die Spieler gruppierte Abfrage liefert für jeden Spieler automatisch dessen Gesamtpunkte.
Wie wird die Abrage genau gemacht ? Hab da schon Stunden davorgesessen und probiert, aber ich komme nicht auf den richtigen Ansatz :-\
Nach der Art Deiner Fragestellung gehe ich davon aus, dass Du stundenlang vor dem Abfragegenerator gesessen hast........ und nicht versucht hast, einen SQL-String zu basteln........
Und wenn man vor dem Abfragegenerator sitzt, gibt es da eine "Funktion" für jedes Abfragefeld. Die sieht man aber standardmäßig nicht. Da muss man auf "Ansicht" und dann auf "Funktionen" gehen, dann sieht man die.
Wenn Du jetzt beim Abfragefeld mit dem Spielernamen auf "Gruppierung" bleibst, die Platzierung überhaupt nicht drin hast oder nur als "Bedingung" nimmst und bei den Punkten auf "Summe" wechselst, bist Du fertig. ::)
Wenn ich eine neue Abfrage erstelle, finde ich unter "Ansicht" keine "Funktion" ... Es gibt nur Datenblatt-Ansicht, 2 x Pivot-Ansichten, SQL-Ansicht und Entwurfs-Ansicht ???
Das, was Du brauchst, ist meines Erachtens hier ganz gut und leicht verständlich beschrieben:
http://office.microsoft.com/de-at/access-help/summieren-von-daten-unter-verwendung-einer-abfrage-HA010096310.aspx (http://office.microsoft.com/de-at/access-help/summieren-von-daten-unter-verwendung-einer-abfrage-HA010096310.aspx)
In der Entwurfsansicht Deiner Abfrage positionierst Du den Mauszeiger auf ein (möglichst leeres) Feld der Feldliste (am unteren Bildrand). Wenn Du dann mit der rechten Maustaste draufklickst, öffnet sich ein Kontextmenü.
Der für Dich interessante Menüpunkt ist der oberste Menüpunkt "Summen". Klick da drauf - damit kannst Du Deine Abfrage in eine Gruppierungsabfrage umwandeln (und auch wieder zurückwandeln) und in weiterer Folge aus den Tabellenwerten Summen, Mittelwerte, Anzahl, erste und letzte Werte etc. errechnen lassen.
Gutes Gelingen
Herb
Siehe Anhang.
Nicht Schaltfläche Ansicht, Menu Ansicht
[Anhang gelöscht durch Administrator]
Erstmal Danke für die hilfreichen Antworten, ich bin dadurch schon einen Schritt weitergekommen ;)
Es funktioniert aber leider nur zum Teil ...
Wenn ich bei der Abfrage (Anhang Abfrage1) das so eingebe, erhalte ich wie gewünscht,
nur die Ergebnisse von Berti (Anhang Ergebnis1) für Platz 1 ;D Soweit, so gut :D
Wenn ich das erweitere auf Platz 2, erhalte ich leider gar keine Ergebnisse mehr (Anhang: Ergebnis2)
[Anhang gelöscht durch Administrator]
Hallo,
die Sache leidet an der fehlenden Normalisierung.
Gruppierungen über Felder in einem Datensatz sind nicht möglich. Gruppiert werden können nur Werte in Spalten einer Tabelle.
Und wie löse ich das Problem ?
Hallo,
indem die Tabellen entspr. den Normalisierungsregeln (siehe u. st. Links 1 und 1a) aufgebaut und entspr. den Datenverhältnissen in Beziehung zueinander gesetzt werden..
Und genau dafür bräuchte ich speziell für meine Datenbank eure Hilfe :-\
Allgemein versteh ich das Prinzip ja, aber irgendwie kapier ich nicht, wie ich das auf meine Datenbank anwenden soll :(
Na auf jeden Fall schonmal, kann die Platzierung nicht so bleiben.
Stell Dir mal vor, die DB wird größer und größer und plötzlich gibt es mehr Spieler und destowegen auch mehr Plätze.......
Dann musst Du plötzlich anbauen, denn Du konntest ja nicht hellsehen.
Du brauchst eine Tabelle mit dem Turnierdatum und einem Primärschlüssel (Autowert). (Ich gehe mal davon aus, dass es sogar zwei Turniere an einem Tag geben kann, deswegen nicht das Datum als Schlüssel.)
Dann eine Tabelle für die Turnierteilnehmer, die ein Referenzfeld zur Turnier-ID hat, den Namen und einen Autowertschlüssel.( Auch Namen können doppelt vorkommen, daher ein extra Schlüsselfeld)
Dann brauchst Du noch eine Tabelle mit den Ergebnissen. Diese hat dann zwei Referenzfelder, einmal zum Turnier und dann noch zu den Teilnehmern. Dazu kommen noch zwei Felder nämlich Platz und Punkte.
Und wenn Du die vernünftig in Beziehung setzt, dann kannst Du mit einer Abfrage alles rauskriegen, was du brauchst.
Zitat von: 69bruno am Mai 23, 2013, 11:14:52
Stell Dir mal vor, die DB wird größer und größer und plötzlich gibt es mehr Spieler und destowegen auch mehr Plätze.......
Es sind bereits mehr als 400 Spieler(Tabelle 'Namensliste' mit AutoWert als Primärschlüssel), aber nur die ersten 9 Plätze pro Turnier bekommen eine Punktewertung.
ZitatIch gehe mal davon aus, dass es sogar zwei Turniere an einem Tag geben kann
Nein, immer nur 1 Turnier.
ZitatDann brauchst Du noch eine Tabelle mit den Ergebnissen. Diese hat dann zwei Referenzfelder, einmal zum Turnier und dann noch zu den Teilnehmern. Dazu kommen noch zwei Felder nämlich Platz und Punkte
Wie ich das sehe, ist das genau meine Tabelle 'Final Table Ergebnisse'
Referenzfelder = Turnierdatum & Platz 1 ... Dazu noch ein Feld Punkte
Vielleicht hakts nur an den Beziehungen ?
Hallo,
ZitatWie ich das sehe, ist das genau meine Tabelle 'Final Table Ergebnisse'
Nein, ist es nicht, denn die Tabelle ist nicht normalisiert.
Die Ergebnisse dürfen nicht nebeneinander stehen, sondern untereinander.
Etwas so:
ErgebnisID TurnierId SpielerID Punkte Platz
1 1 1 200 3
2 1 2 300 1
usw.
Für jeden Spieler wiederholt sich die Zeile mit der gleichen TurnierID aber einer unterschiedlichen SpielerID.
ZitatEs sind bereits mehr als 400 Spieler(Tabelle 'Namensliste' mit AutoWert als Primärschlüssel), aber nur die ersten 9 Plätze pro Turnier bekommen eine Punktewertung.
Und das ist unabänderbar ? Könnte nicht irgendwann der Wunsch bestehen, dass nur 6 Plätze Punkte erhalten oder vielleicht 15 ???
ZitatNein, immer nur 1 Turnier.
Und es kann nie und nimmer vorkommen, dass ein Turnier an zwei Tagen stattfinden muss, weil es nicht beendet werden konnte ???
ZitatWie ich das sehe, ist das genau meine Tabelle 'Final Table Ergebnisse'
Referenzfelder = Turnierdatum & Platz 1 ... Dazu noch ein Feld Punkte
Hier verweise ich auf die Antwort von MzKlMu.
Und der Vorteil ist halt, dass Du bei der gewählten Struktur eben doch jede Änderung übernehmen könntest, ohne die Struktur zu ändern. 8)
ZitatErgebnisID TurnierId SpielerID Punkte Platz
1 1 1 200 3
2 1 2 300 1
Nur zum Verständnis...
in meinem Fall also:
ErgebnisID = AutoWert ? (Neues Feld als PS?)
TurnierID = Turnierdatum ?
SpielerID = Spielername ?
Punkte = PunktePlatz x ? (Nur 1 Feld anstatt bisher 9 Felder für Punkte)
Platz = Platz ? (Nur 1 Feld anstatt bisher 9 Felder für Plätze)
;D
Bis auf Kleinigkeiten ist es das.
Aber sowohl Datum als auch Name eignen sich nicht für eine ID.
Zusätzliches Autowertfeld als PS und fertig.
Punkte und Platz tatsächlich nur ein Feld !
Nein, die Turnierstruktur bleibt und ist seit Jahren immer auf 1 Turnier pro Tag (jeweils Mi + Fr + So) festgelegt. Auch das Turnier selber ist immer so geplant, dass das Turnier am selben Tag beendet wird. Und für unsere interne Punktebewertung bekommen nur die ersten 9 Plätze Punkte, ist auch so gewollt 8)
;D
Soweit so gut, hab jetzt nochmal komplett von vorne angefangen mit einer Tabelle 'Namensliste' (ID = AutoWert) (Spielername=Text).
Dazu hab ich eine normalisierte Tabelle erstellt wie oben angegeben. Nun stellt sich aber folgendes Problem für den User später.
Das Formular hab ich im Anhang kurz dargestellt...
Problem 1: Der User muß nun bei jedem Datensatz das Datum, die Platzierung und die Punkte erneut eingeben. Dabei könnten leicht Fehler unterlaufen.
Lösung ? : Kann ich hier 9 Kombi-Felder benutzen für die jeweilige Platzierung mit Beschriftung (Platz 1, Platz 2 usw.) ?
Es sollte so aussehen wie in Bild 2... allerdings geht nicht, da hier der Wert aus der obersten Zeile (Spielername, Platz, Punkte) dann für alle unteren gleichzeitig mit ausgefüllt wird. (Problem: gleiches Steuerelement)...
Falls das nicht geht, und man muss es so wie in ff.jpg eingeben, dann wäre ein Unterbericht optimal, wo man gleich nach Eingabe des Datensatzes die eingetragenen Werte sieht, sodass man sich daran orientieren kann...is das machbar ? Wenn ja, wie ?
[Anhang gelöscht durch Administrator]
Hallo,
solange Du Dich nicht durchringen kannst, die gesamten Tabellen zu normalisieren, wird das Ganze nix...
Schon erledigt ;) Klappt aber mit dem Bericht nicht wie ich das will... Der Bericht zeigt immer nur den jeweiligen Datensatz an, nicht den gesamten Bericht.
Für den Endbenutzer wäre es sinnvoll, wenn er direkt nach Eingabe des Datensatzes im nächsten Datensatz den Bericht mit allen vorher eingegebenen Daten angezeigt bekommt ;)
Habs selber hinbekommen (mit einem Unterbericht in Kombination mit einem Aktualisierungs-Button)
Bild Unterbericht ;D
[Anhang gelöscht durch Administrator]
Jetzt komm ich zu neuen Problemen:
1.Platzierung muss ich selber eingeben
2.Punkte muss ich selber eingeben
Lösung 1 ? : Platzierung sollte automatisch beim 1.Datensatz = 1 sein, fortführend bis Platz 9 und übertragen werden... Bei Datensatz 10 sollte er wieder bei 1 anfangen. (Datensätze 1-9 sind für das jeweilige Turnierdatum bestimmt, 10-18 sind dann für das nächste Datum usw...)
Lösung 2 ? : Punkte sollten in Abhängigkeit vom Datum angezeigt und übertragen werden (Erkl.: Mittwoch & Sonntag anderes Punkte-System wie Donnerstag & Freitag)
Ist das machbar oder muss ich das Formular so lassen ?
ZitatLösung 1 ? : Platzierung sollte automatisch beim 1.Datensatz = 1 sein, fortführend bis Platz 9 und übertragen werden... Bei Datensatz 10 sollte er wieder bei 1 anfangen. (Datensätze 1-9 sind für das jeweilige Turnierdatum bestimmt, 10-18 sind dann für das nächste Datum usw...)
Wohin sollen Platz 1 - 9 übertragen werden ?
Grundsätzlich könnte das Feld "Platz" auch wegfallen, denn anhand der Punkte sollte klar werden (berechnet) wer welchen Platz hat.
Irgendwie keimt in mir aber der Verdacht, das die 400 Teilnehmer durch die DB in verschiedene Turniere aufgeteilt werden sollen und immer nur 9 Spieler ein Turnier bestreiten. Ansonsten verstehe ich deine Anmerkung
Zitat10-18 sind dann für das nächste Datum usw...)
nicht.
ZitatLösung 2 ? : Punkte sollten in Abhängigkeit vom Datum angezeigt und übertragen werden (Erkl.: Mittwoch & Sonntag anderes Punkte-System wie Donnerstag & Freitag)
Da bin ich aber interessiert......
Hallo,
vielleicht hab ich mich noch nicht klar genug ausgedrückt. ::) Deshalb:
Wirf diese Konstruktion in die Tonne und beginne noch mal von vorn, indem erst die Datenzusammenhänge analysiert und daraus normalisierte Tabellen erzeugt werden.
Mit Formularen und Auswertungen beschäftigt man sich erst danach. 8)
ZitatWohin sollen Platz 1 - 9 übertragen werden ?
Aufgrund der normalisierten Tabelle ergibt es sich einfach, dass Datensatz 1-9 für ein Datum steht.
Und dahin wirds dann ja übertragen. (Bild tabelle.jpg)
Bis jetzt muss ich die Punkte noch manuell eintragen, schön wäre es natürlich, wenn aufgrund des Turnierdatums automatisch die richtigen Punkte ermittelt werden, und sich daraus dann der Platz ergibt (oder andersrum, is egal)
Zitatund immer nur 9 Spieler ein Turnier bestreiten
Nein, es sind zwar unterschiedlich viele Spieler am Start (zwischen 30 u. 100), aber für unsere interne Punktewertung (die ich bisher in Excel berechne) bekommen nur die ersten 9 Spieler Punkte.
ZitatWirf diese Konstruktion in die Tonne und beginne noch mal von vorn, indem erst die Datenzusammenhänge analysiert und daraus normalisierte Tabellen erzeugt werden
Hab doch bereits neu angefangen, und das ist mein Ergebnis, falls diese Tabelle auch falsch sein sollte, bitte helft mir ;)
Folgende Fehlermeldung kommt, wenn ich auf das kleine + klicke, das links vor jedem Datensatz steht ???
ZitatDieser Ausdruck ist falsch eingegeben, oder er ist zu komplex, um ausgerechnet zu werden. Beispielsweise kann ein numerischer Ausdruck zu viele komplizierte Elemente enthalten. Vereinfachen Sie den Ausdruck, indem Sie Teile des Ausdrucks Variablen zuweisen.
[Anhang gelöscht durch Administrator]
Ok,
die Punkte musst Du dann gar nicht mehr in die Tabelle schreiben. Anhand des Datums und des Platzes kann man das in einem Bericht oder Formular speichern. Die automatische Platzvergabe würde ich nicht empfehlen, aber auch das wäre per VBA in einem Eingabeformular möglich.
Wenn Du mehr Hilfe möchtest, dann nimm die DB mit wenigen Testdaten, speicher sie in einem älteren DB-Format und stell sie zur Verfügung, erst dann kann man sehen, was Du genau hast, ob die Beziehungen stimmen und was man machen kann, um es ans laufen zu bringen.
Zitatspeicher sie in einem älteren DB-Format
Wie geht das ? Wenn ich auf "Datenbank speichern als" gehe, kann ich es nur als "Microsoft Access Datenbank" speichern. (896kb)
Ich arbeite mit Access 2010
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Habe die Daten von 11.01.2013 - 28.05.2013 eingetragen, Tabelle funktioniert auch, Abfrage klappt und somit bekomme ich meine gewünschte Rangliste ;D
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Nur, wie oben schon gesagt, wäre es noch besser, wenn man das anderst eingeben könnte (so können zu viele Fehler passieren) ?!