BITTE helfen Sie uns HEUTE mit einer SPENDE
Helfen Sie das LibreOffice Forum zu erhalten!

❤️ DANKE >><< DANKE ❤️

> KEINE WERBUNG FÜR REGISTRIERTE BENUTZER!<
Ihre Spende wird für die Deckung der laufenden Kosten sowie den Erhalt und Ausbau 🌱 des LibreOffice Forums verwendet.
🤗 Als Dankeschön werden Sie im Forum als LO-SUPPORTER gekennzeichnet. 🤗

[gelöst]SQL mit Group By

Base ermöglicht es Ihnen, Ihre Daten in einer Datenbank direkt mit LibreOffice zu bearbeiten.
Antworten
Ray123
Beiträge: 101
Registriert: Di 9. Apr 2013, 12:05
Wohnort: Baden-Württemberg

[gelöst]SQL mit Group By

Beitrag von Ray123 » So 11. Okt 2020, 09:55

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
Zuletzt geändert von Ray123 am Fr 16. Okt 2020, 19:25, insgesamt 1-mal geändert.
Win10 20H2 x64 LO7.1.0.3

F3K Total
Beiträge: 2409
Registriert: So 10. Apr 2011, 10:10

Re: SQL mit Group By

Beitrag von F3K Total » So 11. Okt 2020, 12:32

Moin,
versuch es mal so:

Code: Alles auswählen

SELECT "Part", "PartName", SUM ("MengeBrutto" ) FROM "ZollLiPos" GROUP BY "Part", "PartName"
Gruß R
Windows 10: AOO, LO Linux Mint: AOO, LO

Ray123
Beiträge: 101
Registriert: Di 9. Apr 2013, 12:05
Wohnort: Baden-Württemberg

Re: SQL mit Group By

Beitrag von Ray123 » So 11. Okt 2020, 13:45

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
Win10 20H2 x64 LO7.1.0.3

RobertG
Beiträge: 2732
Registriert: Sa 19. Mai 2012, 17:37
Kontaktdaten:

Re: SQL mit Group By

Beitrag von RobertG » So 11. Okt 2020, 18:24

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
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

Ray123
Beiträge: 101
Registriert: Di 9. Apr 2013, 12:05
Wohnort: Baden-Württemberg

Re: SQL mit Group By

Beitrag von Ray123 » Mo 12. Okt 2020, 07:36

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
Win10 20H2 x64 LO7.1.0.3

An alle, die das LibreOffice-Forum nutzen:


Bitte beteiligen Sie sich mit 7 Euro pro Monat und helfen uns bei unserem Budget für das Jahr 2024.
Einfach per Kreditkarte oder PayPal.
Als Dankeschön werden Sie im Forum als LO-SUPPORTER gekennzeichnet.

❤️ Vielen lieben Dank für Ihre Unterstützung ❤️

Antworten