🙏 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!🍀

❤️ 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. 🤗

Abfrage mit UNION

Base ermöglicht es Ihnen, Ihre Daten in einer Datenbank direkt mit LibreOffice zu bearbeiten.
Antworten
CaylaSha
Beiträge: 4
Registriert: Sa 15. Okt 2011, 11:20

Abfrage mit UNION

Beitrag von CaylaSha » Sa 15. Okt 2011, 12:04

Ich habe eine Tabelle, in der ich alle meine Ausgaben und Einnahmen notiere, um einen Überblick zu behalten, damit nicht am Ende vom Geld noch Monat übrig ist ;)

Die Tabelle "ausgaben" sieht so aus:
id : BIGINT, Primary Key
datum : DATE
vorzeichen : VARCHAR, enthält "+" oder "-"
betrag : FLOAT
beschreibung : VARCHAR, Freitext
typ : VARCHAR, Gruppierung der Ausgaben in verschiedene Kategorien
isEC : BOOLEAN, ob es eine Bar-Ausgabe oder eine per EC/Kreditkarte war

Alle Ausgaben pro Monat ist kein Problem:
SELECT YEAR( "datum" ), MONTH( "datum" ), SUM( "betrag" ) FROM "ausgaben" WHERE "vorzeichen" = '-' GROUP BY YEAR( "datum" ), MONTH( "datum" ) ORDER BY YEAR( "datum" ), MONTH( "datum" )
Alle Einnahmen pro Monat auch nicht:
SELECT YEAR( "datum" ), MONTH( "datum" ), SUM( "betrag" ) FROM "ausgaben" WHERE "vorzeichen" = '+' GROUP BY YEAR( "datum" ), MONTH( "datum" ) ORDER BY YEAR( "datum" ), MONTH( "datum" )

Aber wenn ich jetzt beides kombinieren will, um zu sehen, ob nun pro Monat Geld übrig ist oder nicht, wirds schwierig. Ich habs mit einem UNION probiert, aber entweder kann Base kein UNION, oder ich mach irgendwas falsch:
(SELECT YEAR( "datum" ), MONTH( "datum" ), -SUM( "betrag" ) FROM "ausgaben" WHERE "vorzeichen" = '-' GROUP BY YEAR( "datum" ), MONTH( "datum" ))
UNION ALL
(SELECT YEAR( "datum" ), MONTH( "datum" ), SUM( "betrag" ) FROM "ausgaben" WHERE "vorzeichen" = '+' GROUP BY YEAR( "datum" ), MONTH( "datum" ))
GROUP BY YEAR( "datum" ), MONTH( "datum" )
ORDER BY YEAR( "datum" ), MONTH( "datum" )

Ich habs schon nur mit UNION probiert (ohne das ALL), ich habs schon probiert, dass das ORDER BY bei jedem Statement steht, ich habs schon ohne das dritte GROUP BY probiert, ich habs schon ohne Klammern und auch ohne Zeilenumbrüche probiert, aber hat alles nichts geholfen. Auch googlen hat nicht geholfen, scheinbar benutzen Leute, die Base benutzen, nicht so häufig UNION :)
Die Fehlerausgabe von Base ist auch nicht so richtig hilfreich. Er sagt nur "Der gesetzte Befehl ist kein SELECT-Befehl. Es sind nur Abfragen erlaubt." oder "syntax error, unexpected $end, expecting BETWEEN or IN or SQL_TOKEN_LIKE".
Super ist auch, wenn man auf LibreOffice-Hilfe klickt, dann landet man hier: http://help.libreoffice.org/sdatabase/s ... System=WIN :(

Also meine Fragen sind:
- Weiß jemand eine gute Seite, die das in Base verwendete SQL erklärt?
- Weiß jemand sicher, ob UNION ALL in Base funktionieren sollte oder nicht?
- Kann jemand erkennen, wo der Fehler in meinem Statement liegt?
- Oder weiß vielleicht jemand eine bessere Möglichkeit an die gewünschte Info zu kommen als dieses Monster-Statement mit UNION und drei GROUP BYs?

Bertold

Re: Abfrage mit UNION

Beitrag von Bertold » Sa 15. Okt 2011, 12:33

Hallo,
wenn man auf LibreOffice-Hilfe klickt, dann landet man hier: http://help.libreoffice.org/sdatabase/s ... System=WIN
nur dann, wenn man das Hilfe-Paket nicht installiert hat
http://de.libreoffice.org/download/
ob UNION ALL in Base funktionieren sollte oder nicht?
funktioniert
scheinbar benutzen Leute, die Base benutzen, nicht so häufig UNION
http://de.search.yahoo.com/search;_ylt= ... t&fr=moz35

http://sql.1keydata.com/de/sql-union-all.php
http://www.ooowiki.de/SQL

CaylaSha
Beiträge: 4
Registriert: Sa 15. Okt 2011, 11:20

Re: Abfrage mit UNION

Beitrag von CaylaSha » Sa 15. Okt 2011, 13:12

Bertold hat geschrieben:Hallo,
wenn man auf LibreOffice-Hilfe klickt, dann landet man hier: http://help.libreoffice.org/sdatabase/s ... System=WIN
nur dann, wenn man das Hilfe-Paket nicht installiert hat
Ups, Hilfe installiere ich nie... Aber ist das nicht eine URL, die "ins Internet" führt? Das ist doch kein lokaler Pfad.
Bertold hat geschrieben:
scheinbar benutzen Leute, die Base benutzen, nicht so häufig UNION
http://de.search.yahoo.com/search;_ylt= ... t&fr=moz35
Ah, ok, ich hab immer speziell nach LibreOffice gesucht ("LibreOffice Base SQL UNION"), ich dachte, das hätte sich schon so weit von einander entfernt, dass mir da ein OpenOffice-Forum nicht weiterhilft...

Also ich hab jetzt herausgefunden, dass es eine Option gibt namens "SQL-Kommando direkt ausführen" (http://help.libreoffice.org/Common/Run_ ... irectly/de) und wenn man die aktiviert, dann geht UNION plötzlich. Auch die Fehlerausgabe verbessert sich, sie wird geradezu informativ. Ich hab nur noch nicht verstanden, warum man diese Option erst speziell anschalten muss, wenn doch hinterher alles besser funktioniert.
(Wen es interessiert: In dem Fenster, wo man die SQL-Abfrage eingibt, im Menü "Bearbeiten" ist diese Option "SQL-Kommando direkt ausführen". Nachdem man das angeklickt hat, erscheint auch ein Button in der Toolbar, wo man die Option an- und abschalten kann.)

Auf jeden Fall, mit diesem Statement hab ich jetzt, was ich wollte:
SELECT "Jahr", "Monat", SUM( "Summe" ) AS "Die Summe" FROM
(
(SELECT YEAR( "datum" ) AS "Jahr", MONTH( "datum" ) AS "Monat", -SUM( "betrag" ) AS "Summe" FROM "ausgaben" WHERE "vorzeichen" = '-' GROUP BY YEAR( "datum" ), MONTH( "datum" ))
UNION ALL
(SELECT YEAR( "datum" ) AS "Jahr", MONTH( "datum" ) AS "Monat", SUM( "betrag" ) AS "Summe" FROM "ausgaben" WHERE "vorzeichen" = '+' GROUP BY YEAR( "datum" ), MONTH( "datum" ))
)
GROUP BY "Jahr", "Monat"
ORDER BY "Jahr", "Monat"

Danke für die Hilfe! :)


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