❤️ Helfen Sie noch heute, unser LibreOffice Forum zu erhalten! ❤️
Unterstützen Sie das LibreOffice-Forum und helfen Sie uns, unser Ziel für 2025 zu erreichen!

🍀 Jeder Beitrag zählt – vielen Dank für Ihre Unterstützung!🍀
Mit Ihrer Spende sichern Sie den Fortbestand, den Ausbau und die laufenden Kosten dieses Forums. 🌱


❤️ DANKE >> << DANKE ❤️

>> 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] Abfrage: Summenbildung für verschiedene Bedingungen in einer Tabelle - Cross Join?

Base ermöglicht es Ihnen, Ihre Daten in einer Datenbank direkt mit LibreOffice zu bearbeiten.
Antworten
EinsamerBaumWald
Beiträge: 31
Registriert: Fr 28. Nov 2014, 20:41

[gelöst] Abfrage: Summenbildung für verschiedene Bedingungen in einer Tabelle - Cross Join?

Beitrag von EinsamerBaumWald » Do 8. Sep 2016, 11:21

Hallo,

ich habe folgende Abfrage

Code: Alles auswählen

SELECT "Kraut", SUM( "Gewicht" ) AS "GesamtGewicht", COUNT( "Kraut" ) AS "Anzahl", SUM( "Gewicht" ) / COUNT( "Kraut" ) AS "Durchschnittsgewicht" FROM "Kräuter" WHERE "verkauft" = 0 AND  YEAR("Chargennummer") = 2015 GROUP BY "Kraut" ORDER BY "Kraut" ASC
und würde jetzt gerne die Spalten für die Bedingung
YEAR("Chargennummer") = 2016
hinzufügen. Das sollte ja mit JOIN funktionieren, aber ich bekomme immer nur Fehlermeldungen.

Probiert habe ich z.B.

Code: Alles auswählen

SELECT "Kraut", SUM( "Gewicht" ) AS "GesamtGewicht", COUNT( "Kraut" ) AS "Anzahl", SUM( "Gewicht" ) / COUNT( "Kraut" ) AS "Durchschnittsgewicht" FROM "Kräuter" as "15" WHERE "verkauft" = 0 AND  YEAR("Chargennummer") = 2015 GROUP BY "15"."Kraut" 
CROSS JOIN
(
SELECT SUM( "Gewicht" ) AS "GesamtGewicht 16", COUNT( "Kraut" ) AS "Anzahl 16", SUM( "Gewicht" ) / COUNT( "Kraut" ) AS "Durchschnittsgewicht 16" FROM "Kräuter" AS "16" WHERE "verkauft" = 0 AND  YEAR("Chargennummer") = 2016 GROUP BY "16"."Kraut"
)
Die Fehlermeldung
SQL-Status: HY000
Fehler-Code: 1000

syntax error, unexpected $end, expecting BETWEEN or IN or SQL_TOKEN_LIKE
hilft mir nicht weiter.

Irgendwie stehe ich gerade auf dem Schlauch.
Wer kann mir weiterhelfen?
Vielen Dank!

Die Datenbank ist diese hier: http://libreoffice-forum.de/download/file.php?id=4408
Zuletzt geändert von EinsamerBaumWald am Do 8. Sep 2016, 20:15, insgesamt 1-mal geändert.

EinsamerBaumWald
Beiträge: 31
Registriert: Fr 28. Nov 2014, 20:41

Re: Abfrage: Summenbildung für verschiedene Bedingungen in einer Tabelle - Cross Join?

Beitrag von EinsamerBaumWald » Do 8. Sep 2016, 12:13

Mit UNION kann ich beide Select-Statements verbinden, dann hätte ich auch alle Angaben "auf einer Seite". Aber untereinander statt nebeneinander.

Code: Alles auswählen

(
SELECT "Kraut",YEAR(now())-1 as "Erntejahr", SUM( "Gewicht" ) AS "GesamtGewicht", COUNT( "Kraut" ) AS "Anzahl", SUM( "Gewicht" ) / COUNT( "Kraut" ) AS "Durchschnittsgewicht" FROM "Kräuter"  WHERE "verkauft" = 0 AND YEAR("Chargennummer") = YEAR(now())-1 GROUP BY "Kraut" )

UNION

(
SELECT "Kraut", YEAR(now()) as "Erntejahr", SUM( "Gewicht" ) AS "GesamtGewicht 16", COUNT( "Kraut" ) AS "Anzahl 16", SUM( "Gewicht" ) / COUNT( "Kraut" ) AS "Durchschnittsgewicht 16" FROM "Kräuter" WHERE "verkauft" = 0 AND  YEAR("Chargennummer") = YEAR(now()) GROUP BY "Kraut"
)
ORDER BY "Erntejahr"
Funktioniert aber nur, wenn im Fenster Abfrageentwurf im Menü Bearbeiten -> SQL-Kommando direkt ausführen angehakt ist.

RobertG
* LO-Experte *
Beiträge: 2888
Registriert: Sa 19. Mai 2012, 17:37
Kontaktdaten:

Re: Abfrage: Summenbildung für verschiedene Bedingungen in einer Tabelle - Cross Join?

Beitrag von RobertG » Do 8. Sep 2016, 17:38

Hallo EinsamerBaumWald,

wenn Du zwei Tabellen mit einer Abfrage (auch mit einem Join jeglicher Art) verknüpfst, so erhältst nicht eine Abbildung gleichlautender Felder nebeneinander. Stattdessen begrenzt oder erweiterst Du die Anzahl der anzuzeigenden Datensätze.
Aus dem Handbuch:
Beim CROSS JOIN müssen auf jeden Fall die Tabellen mit einem Aliasnamen versehen werden, wobei das Hinzufügen des Begriffes AS nicht unbedingt notwendig ist. Es werden einfach alle Datensätze aus der ersten Tabelle mit allen Datensätzen der zweiten Tabelle gekoppelt. So
ergibt die obige Abfrage alle möglichen Paarungen aus der ersten Tabelle mit denen aus der zweiten Tabelle mit Ausnahme der Paarungen, bei denen es sich um gleiche Spieler handelt. Die Bedingung darf beim CROSS JOIN allerdings keine Verknüpfung der Tabellen mit ON enthalten. Stattdessen können unter WHERE Bedingungen eingegeben werden.
Du erzeugst so also nicht Felder nebeneinander sondern alle möglichen Koppelungen der betroffenen Tabellen. Du vervielfachst also die Datensätze.

Die folgende Technik dürfte für Dich zielführender sein:

Code: Alles auswählen

SELECT "a".*, "b".* FROM (SELECT "Kraut", SUM( "Gewicht" ) AS "GesamtGewicht", COUNT( "Kraut" ) AS "Anzahl", SUM( "Gewicht" ) / COUNT( "Kraut" ) AS "Durchschnittsgewicht" FROM "Kräuter" WHERE "verkauft" = 0 AND  YEAR("Chargennummer") = 2015 GROUP BY "Kraut") AS "a" LEFT JOIN (SELECT "Kraut", SUM( "Gewicht" ) AS "GesamtGewicht", COUNT( "Kraut" ) AS "Anzahl", SUM( "Gewicht" ) / COUNT( "Kraut" ) AS "Durchschnittsgewicht" FROM "Kräuter" WHERE "verkauft" = 0 AND  YEAR("Chargennummer") = 2016 GROUP BY "Kraut") AS "b" ON "a"."Kraut" = "b"."Kraut"
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

EinsamerBaumWald
Beiträge: 31
Registriert: Fr 28. Nov 2014, 20:41

Re: Abfrage: Summenbildung für verschiedene Bedingungen in einer Tabelle - Cross Join?

Beitrag von EinsamerBaumWald » Do 8. Sep 2016, 20:12

Hallo Robert,

herzlichen Dank für Deine Mühe!
Das ist, was ich ursprünglich suchte.

Ich habe erst vor kurzem begonnen mich mit LO Base und SQL zu beschäftigen und habe sicher noch nicht alles durchdrungen, manche Konzepte sind noch ungewohnt für mich. Da ist es sehr nett, wenn man andere Menschen um Rat fragen kann, wenn man nach dem Durchblättern von 10 Seiten Suchergebnissen (und Lesen der Links) keine Antwort auf seine Frage gefunden hat.

Nachdem ich die Abfrage mit UNION nun schon einige Male verwendet habe, sagt mir diese Darstellung der Daten doch mehr zu…

Grüße,
EinsamerBaumWald


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.



Antworten