Auf und Abstieg oder Position gehalten einbauen

Heinzi79

Aktiver Benutzer
Beiträge
32
Hallo an alle, kann mir helfen das in dem Code (Tabellenplatzierung) noch auf und abstieg oder Platz gehalten,
einbauen kann in Open Office Datenbank oder Libre Office Datenbank. Im Bereich Abfrage.

SELECT ( SELECT COUNT( "Tore" ) FROM "viw_Punkte" WHERE "Punkte" > "a"."Punkte" OR ( "Punkte" = "a"."Punkte" AND "Tore" > "a"."Tore" ) OR ( "Punkte" = "a"."Punkte" AND "Tore" = "a"."Tore" AND "Tore" - "Gegentore" > "a"."Tore" - "a"."Gegentore" ) ) + 1 AS "Platz", "Verein", "Spiele", "Siege", "Unentschieden", "Verloren", "Tore", "Gegentore", "Punkte", "a"."Tore" - "a"."Gegentore" AS "Tordifferenz" FROM "viw_Punkte" AS "a" ORDER BY "Punkte" DESC, "Tore" DESC, "Gegentore" ASC, "Tordifferenz" ASC

Ich habe mal Bild mit eingestellt, ich meine wo Po steht. Das heißt Positionen.

Ich möchte das die Positionen zur bestimmt wird, zwischen vor Woche und nächsten Spiel.

Für eine Hilfe wäre ich dankbar!
 

Anhänge

  • Position.jpg
    Position.jpg
    103,6 KB · Aufrufe: 25
Werbung:
Das sieht gruselig aus und ist schwer zu lesen. Du suchst vermutlich so etwas wie CASE im Select-Teil, schau mal, ob deine Datenbank das kann.
 
Ich meine dein Code sieht gruselig aus weil keine Zeilenumbrüche und ein wurstiger Subselect.

Wo soll Auf- und Abstieg denn herkommen, wie kommst du an die Tabelle vom vorherigen Spieltag? Wie sehen deine Rohdaten in den Tabellen aus?
 
Die Daten kommen das den Spieltagen die ich in Spielplan eingeben habe. Woche für Woche. Die Tabelle im Bild habe ich In Excel eingetragen,
weil, ich nicht weis wie das gehen soll. mit den Auf, Abstieg oder Position geht.
 
Zuletzt bearbeitet:
Tabellen: tbl_Filter, tbl_Spiele, tbl_Vereine, 2 Datein mit view, viw_Punkte, viw_Spieplan

Abfragen: qry_Spielkombinationen, qry_Spielplan, qry_Tabellenplatzierung, v_qry_Punkte, v_qry_Spielplan

Formulare: frm_Spielplan, frm_Ergebnisse
 

Anhänge

  • 1111111.png
    1111111.png
    30,8 KB · Aufrufe: 15
  • 222222.jpg
    222222.jpg
    129,3 KB · Aufrufe: 15
  • 333333.jpg
    333333.jpg
    121,3 KB · Aufrufe: 15
Zuletzt bearbeitet:
Also mit der Information zum Spieldatum hast du eigentlich alles, was es braucht, um den aktuellen Tabellenstand und den Tabellenstand zu einem anderen Datum zu berechnen. Das musst du vergleichen und hast die Information zur Tabellenveränderung.

Es gibt drei Probleme:

1) Du verrätst uns hier häppchenweise was du hast, das hilft nicht. Formulare interessieren nicht, Screenshots sind nicht besonders toll weil man daraus nichts kopieren kann. Du hast die Tabelle tbl_Spiele, die ist interessant. Welche Spalten mit welchem Typ gibt es in dieser Tabelle?

2) In deiner Formularansicht Spielplan gibt es zwar ein Datum aber keinen "Spieltag". Nicht alle Spiele am selben "Spieltag" finden auch am selben Datum statt. Wenn du also die Tabelle vom Sonntag nicht mit der Tabelle von Samstag davor vergleichen willst musst du dir diese Zuordnung genau überlegen. Natürlich kann man sagen alles, was 3 oder 4 Tage älter ist, gehört zum vorherigen Spieltag. Aber dann gibt es diese Dinge wie Nachholspiele oder Englische Woche wo die Spieltage sehr dicht bei einander liegen. Also entweder denkst du dir eine clevere Bedingung aus oder du pflegst in der Tabelle noch die Information Spieltag.

3) Ich kenne Base nicht. Erster Treffer bei Google sagt mir folgendes:
Einführung
[...]
Hinweise:
LibreOffice verwendet die Begriffe "Datenquelle" und "Datenbank", um die gleiche Sache zu beschreiben. Dies kann ein Tabellendokument, ein Textdokument oder eine Datenbank wie MySQL oder dBase sein.
LibreOffice Base verwendet die HSQL Datenbank-Engine (Hyper Structured Query Language). Alle Dateien, die von dieser Engine erzeugt werden, werden in einer ZIP-Datei gespeichert. Die Datenbankstruktur ist in dieser ZIP-Datei enthalten.
Wir wissen also gar nicht, wo deine Daten wirklich liegen. hast du ein richtiges SQL DBMS dahinter, z.B. MySQL, MariaDB, PostgreSQL oder MS SQL oder liegen die Daten in einer Excel / Textdatei? Bei letzterem dürften viele Funktionen gar nicht möglich sein die man z.B. bei einem DBMS nutzen würde.
 
Ich stelle mal die 2 Tabellen und die 2 vie Dateien als Bild ein.
tbl_Spiele, tbl_Vereine, viw_Punkte, viw_Spielplan
 

Anhänge

  • tbl_Spiele.jpg
    tbl_Spiele.jpg
    116,3 KB · Aufrufe: 19
  • tbl_Vereine.jpg
    tbl_Vereine.jpg
    75,2 KB · Aufrufe: 18
  • viw_Punkte.jpg
    viw_Punkte.jpg
    120,9 KB · Aufrufe: 15
  • viw_Spielplan.jpg
    viw_Spielplan.jpg
    213,3 KB · Aufrufe: 22
Libre Office Base Datenbank speichert die Datei als odb
diese ist gebettet als HSQLDB
 

Anhänge

  • datei.jpg
    datei.jpg
    18,9 KB · Aufrufe: 7
  • HSQLDB.jpg
    HSQLDB.jpg
    15 KB · Aufrufe: 7
Also ROW_NUMBER() scheint HSQL zu können, nur die Syntax ist komisch. Viele andere nützliche Sachen scheinbar nicht, dadurch wird das ziemlich wild. Aber es müsste gehen, etwa so:
Code:
SELECT    aktuell3.*,
        (CASE WHEN aktuell3.Platz < vorletztertag.Platz THEN '+' WHEN aktuell3.Platz < vorletztertag.Platz THEN '-' ELSE 'o' END) AS Veränderung
FROM    (

SELECT    aktuell2.*,
        ROW_NUMBER() OVER () AS Platz
FROM    (

SELECT    aktuell.ID,
        sum(aktuell.Tore) AS Tore,
        sum(aktuell.Gegentore) AS Gegentore,
        sum(aktuell.Punkte) AS Punkte
FROM    (

SELECT    HID AS ID,
        Datum,
        HTore AS Tore,
        ATore AS Gegentore,
        (CASE WHEN HTore > ATore THEN 3 WHEN Htore = ATore THEN 1 ELSE 0 END) AS Punkte
FROM    tbl_Spiele
WHERE    Datum IS NOT NULL
AND        HTore IS NOT NULL
AND        ATore IS NOT NULL
UNION ALL
SELECT    AID AS ID,
        Datum,
        ATore AS Tore,
        HTore AS Gegentore,
        (CASE WHEN ATore > HTore THEN 3 WHEN Htore = ATore THEN 1 ELSE 0 END) AS Punkte
FROM    tbl_Spiele
WHERE    Datum IS NOT NULL
AND        HTore IS NOT NULL
AND        ATore IS NOT NULL

        ) aktuell
GROUP BY aktuell.ID
ORDER BY sum(aktuell.Punkte) DESC,sum(aktuell.Tore) - sum(aktuell.Gegentore) DESC

        ) aktuell2

        ) aktuell3
LEFT JOIN (

SELECT    vorletztertag2.*,
        ROW_NUMBER() OVER () AS Platz
FROM    (

SELECT    vorletztertag.ID,
        sum(vorletztertag.Tore) AS Tore,
        sum(vorletztertag.Gegentore) AS Gegentore,
        sum(vorletztertag.Punkte) AS Punkte
FROM    (

SELECT    HID AS ID,
        Datum,
        HTore AS Tore,
        ATore AS Gegentore,
        (CASE WHEN HTore > ATore THEN 3 WHEN Htore = ATore THEN 1 ELSE 0 END) AS Punkte
FROM    tbl_Spiele
WHERE    Datum IS NOT NULL
AND        HTore IS NOT NULL
AND        ATore IS NOT NULL
AND        Datum < ( SELECT max(Datum) FROM tbl_Spiele )
UNION ALL
SELECT    AID AS ID,
        Datum,
        ATore AS Tore,
        HTore AS Gegentore,
        (CASE WHEN ATore > HTore THEN 3 WHEN Htore = ATore THEN 1 ELSE 0 END) AS Punkte
FROM    tbl_Spiele
WHERE    Datum IS NOT NULL
AND        HTore IS NOT NULL
AND        ATore IS NOT NULL
AND        Datum < ( SELECT max(Datum) FROM tbl_Spiele )

        ) vorletztertag
GROUP BY vorletztertag.ID
ORDER BY sum(vorletztertag.Punkte) DESC,sum(vorletztertag.Tore) - sum(vorletztertag.Gegentore) DESC

        ) vorletztertag2

        ) vorletztertag3
ON        aktuell3.ID = vorletztertag3.ID
Das sind eigentlich zwei Tabellen. Eine zum aktuellen letzten Tag und eine zum Vortag (nicht Spieltag weil nicht vorhanden sondern Kalendertag). Die werden gejoint, über CASE wird die Platzveränderung bestimmt.
 
Hallo ich weis nicht warum der Code nicht geht, es kommt Fehlerschlagmeldung.

Gerne würde ich dir meine Fussballdatenbank sende, aber es geht nicht. Im Forum.
 

Anhänge

  • fdsfsfsfs.jpg
    fdsfsfsfs.jpg
    196 KB · Aufrufe: 9
Werbung:
Poste den TEXT, d
@Heinzi79: Probier mal den "Mehr" Button in dem Dialog, vielleicht zeigt der das Statement und den Fehler als kopierbaren Text.
Niemand hier hat wirklich Lust, Text aus einem Bild abzutippen. Ich habe nicht mal Lust, soetwas unformatiertes zu lesen. Und wenn doch, das SQL Parsingvermögen meines Gehirns ist deutlich schlechter, als das meiner DB.

Der Fehler deutet darauf hin, dass entweder Row_number() nicht unterstützt wird oder in der gleichen Ebene nicht auf dessen Ergebnis zugegriffen werden kann.

Du könntest vielleicht eine andere DB verwenden. Libre Office / base sollten da nicht sehr wählerisch sein und einige andere DB können dann sicher mehr als HSQLDB.
 
Zurück
Oben