🙏 Helfen Sie jetzt mit, unser LibreOffice Forum zu erhalten! 🙏
Mit Ihrer Spende sichern Sie den Fortbestand, den Ausbau und die laufenden Kosten dieses Forums. 🌱
🍀 Jeder Beitrag zählt – vielen Dank für Ihre Unterstützung!🍀
>> Dank Ihrer Unterstützung -> Keine Werbung für alle registrierten LibreOffice-Forum User! <<
🤗 Als Dankeschön werden Sie im Forum als LO-SUPPORTER gekennzeichnet. 🤗
[gelöst]SQL mit Group By
[gelöst]SQL mit Group By
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
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
Zuletzt geändert von Ray123 am Fr 16. Okt 2020, 19:25, insgesamt 1-mal geändert.
Win10 20H2 x64 LO7.1.0.3
Re: SQL mit Group By
Moin,
versuch es mal so:
Gruß R
versuch es mal so:
Code: Alles auswählen
SELECT "Part", "PartName", SUM ("MengeBrutto" ) FROM "ZollLiPos" GROUP BY "Part", "PartName"
Windows 11: AOO, LO Linux Mint: AOO, LO
Re: SQL mit Group By
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
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
Win10 20H2 x64 LO7.1.0.3
Re: SQL mit Group By
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:
Gruß
Robert
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
Robert
https://de.libreoffice.org/get-help/documentation/
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=base_handbuch
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=xml_formulare
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=base_handbuch
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=xml_formulare
Re: SQL mit Group By
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
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
Win10 20H2 x64 LO7.1.0.3
An alle, die das LibreOffice-Forum gern nutzen und unterstützen wollen:
Bitte helfen Sie uns mit 7 Euro pro Monat.
Durch Ihren Beitrag tragen Sie dazu bei, unsere laufenden Kosten für die kommenden Monate zu decken.
Unkompliziert per Kreditkarte oder PayPal.
Als ein kleines Dankeschön werden Sie im LO-Forum als SUPPORTER gekennzeichnet.