Hallo,
ich habe da ein kleines Problem mit einem SQL.Statement.
Ich habe 2 Tabellen:
SQL1.ExecNonQuery("CREATE TABLE Bilder (IDx INTEGER PRIMARY KEY, bName TEXT ,bNr Integer, bDat TEXT, Jr Integer)")
SQL1.ExecNonQuery("CREATE TABLE Texte (IDx INTEGER PRIMARY KEY, eText TEXT ,tDat TEXT, TagText TEXT,D Integer,M Integer,J Integer, TNr Integer, DTag String)")
In der Tabelle Texte befindet sich die Spalte J. Diese beinhaltet die Jahreszahl
In der Spalte Bilder befindet sich die Spalte Jr. Diese beinhaltet ebenfalls die Jahreszahl.
Die IDx-Spalten vergibt die DB automatisch.
Den Datensatz in der Tabelle Texte gibt es maximal 1x pro Tag.
Die Datensätze in der Tabelle Bilder variieren. Es können pro Tag X Bilder hinzugefügt werden.
Nun wollte ich auswerten, wie viele Texte und Bilder pro Jahr gespeichert werden. Hier mein Code.
SQL="SELECT J, COUNT(T.IDx) As TAnz, COUNT(B.IDx) AS BAnz FROM Texte AS T LEFT JOIN Bilder AS B ON B.Jr = T.J GROUP BY J"
C=SQL1.ExecQuery(SQL)
For I=0 To C.RowCount-1
C.Position=I
E1=C.GetString("J")
E2=C.Getint("TAnz")
E3=C.Getint("BAnz")
Log(E1 & " " & E2 & " " & E3)
Next
Das Ergebnis ist z.B. für das Jahr:
2020 4440 4440
2019 9765 9765
2018 5828 5828
Das ist eindeutig falsch. Es gruppiert korrekt, aber Ich bekomme als Ergebnis Count(T.IDx) x COUNT(B.IDx)
Di Abfrage läuft problemlos durch. Es werden 3 Datensätze zurückgegeben. Das ist korrekt, da sich in der Datenbank die Jahre 2017, 2018 und 2019 befinden.
Es ist dabei egal ob ich COUNT(J) oder COUNT(IDx) nehme.
Ich bin mir sicher, dass meine Abfrage auf anderen DB-Systemen funktioniert.
Wo habe ich bei B4A einen Denkfehler?
Gruß Lothar