Seite 1 von 1

[gelöst]SQL mit Group By

Verfasst: So 11. Okt 2020, 09:55
von Ray123
Guten Morgen zusammen,

ich knoble gerade über ein Problem und konnte dazu keine befriedigende Antwort im Netz finden.
Das Problem bezieht sich auf die interne HSQL-Datenbank, LO-Version 7.0.0.3 (x64). Die SQL-Befehle habe ich direkt im SQL-Fenster von LO-Base eingegeben.

Ich habe eine kleine Tabelle mit gerade mal drei Felder: Part, PartName und MengeBrutto.

Der Wert Part kommt mehrfach vor und soll mit dem Sum-Befehl addiert werden. Soweit so gut:

SELECT "Part", SUM ("MengeBrutto" ) FROM "ZollLiPos" GROUP BY "Part"

Mit diesem Befehl passt das Ergebnis:
10.01.0262,120000.0,10.01.0262,
16.01.0090,840000.0,16.01.0090,
21.01.0755,120000.0,21.01.0755,
22.02.0710,120000.0,22.02.0710,
26.01.0152,120000.0,26.01.0152,
26.01.0158,120000.0,26.01.0158,

Hier wundere ich mich nur über die doppelte Ausgabe des Feldes Part.

Möchte ich das Feld PartName mit ausgeben

SELECT "Part", "PartName", SUM ("MengeBrutto" ) FROM "ZollLiPos" GROUP BY "Part"

erhalte ich folgende Meldung:

2: Not in aggregate function or group by clause: org.hsqldb.Expression@42600636 in statement [SELECT "Part", "PartName", SUM( "MengeBrutto" ) FROM "ZollLiPos" GROUP BY "Part"]

Die Zuordnung Part und PartName ist eindeutig, Part ist eine Teilenummer, PartName der zugehörige Name.

Danke für sachdienliche Hinweise.

Schöner Sonntag noch
Ray

Re: SQL mit Group By

Verfasst: So 11. Okt 2020, 12:32
von F3K Total
Moin,
versuch es mal so:

Code: Alles auswählen

SELECT "Part", "PartName", SUM ("MengeBrutto" ) FROM "ZollLiPos" GROUP BY "Part", "PartName"
Gruß R

Re: SQL mit Group By

Verfasst: So 11. Okt 2020, 13:45
von Ray123
Danke schön, die Meldung kommt dann nicht, die Ausgabe sieht so aus:

10.01.0262, ,120000.0,10.01.0262, ,
16.01.0090, ,840000.0,16.01.0090, ,
21.01.0755, ,120000.0,21.01.0755, ,
22.02.0710, ,120000.0,22.02.0710, ,
26.01.0152, ,120000.0,26.01.0152, ,

wieder ein Feld mehr und wenn ich die Tabelle mit ca. zehn weiteren Feldern erweitern will, kommen dann wohl keine Daten. Ich werde da wohl beim ersten Group-Befehl bleiben und mit einer zweiten Abfrage die restlichen Daten lesen.

Gibt es eine Erklärung, warum die restlichen Felder nicht gelesen werden?
Gruß
Ray

Re: SQL mit Group By

Verfasst: So 11. Okt 2020, 18:24
von RobertG
Hallo Ray,

ich habe versucht das Verhalten mit der doppelten Ausgabe des ersten Feldes nach zu vollziehen. Passiert hier mit der internen (alten) HSQLDB auch, nicht aber mit einer externen neueren HSQLDB. Startest Du den Befehl nicht über Extras → SQL, sondern als Abfrage über die GUI, so passiert das nicht.

Wenn Du die interne Firebird-Datenbank benutzt, dann stimmt auch die Anzeige in Extras → SQL. Es scheint also, dass die interne HSQLDB all die Felder noch einmal ausgibt, nach denen gruppiert wird.

Warum bei Dir die Abfrage mit einer zusätzlichen Gruppierung nicht mehr, sondern weniger Datensätze ausgibt ist mir ohne einen Blick in die Datenbank ein Rätsel. Vor allem auch rätselhaft erscheint mir, dass "PartName" grundsätzlich leer ist. Das würde eher zu dieser Art der Abfrage passen:

Code: Alles auswählen

SELECT "Part", "PartName", SUM ("MengeBrutto" ) FROM "ZollLiPos" 
GROUP BY "Part", "PartName" 
HAVING "PartName" IS NULL
Gruß

Robert

Re: SQL mit Group By

Verfasst: Mo 12. Okt 2020, 07:36
von Ray123
Hallo Robert,

ein Teil deiner Fragen kann ich klären, PartName habe ich zu Testzwecken grundsätzlich mit einem Leerzeichen belegt, da ich das Feld momentan nicht brauche. Die Tabelle besteht aktuell nur aus drei Feldern, von denen ich nur zwei benötige. Der weitere Ausbau steht aber bevor. Vielleicht noch eine Hintergrundinfo: Die Daten lese ich über einen ODBC-Treiber aus einem ERP-System und speichere sie in der hsqldb zwischen, um hier gleiche Artikel zu summieren, bevor mit den Daten eine XML-Datei erstellt wird.

Die Anzahl der Datensätze schwankt, da die Tabelle nach jeder Ausgabe gelöscht wird um sicherzustellen, daß in der XML-Datei auch nur die aktuell gewünschten Artikel vorhanden sind.

Gruß und Danke
Ray