🙏 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 mehreren Spalten für ein Feld?

Base ermöglicht es Ihnen, Ihre Daten in einer Datenbank direkt mit LibreOffice zu bearbeiten.
Freischreiber
* LO-Experte *
Beiträge: 830
Registriert: Fr 28. Mär 2014, 10:41

Abfrage mit mehreren Spalten für ein Feld?

Beitrag von Freischreiber » Do 11. Dez 2014, 22:17

Hallo,

ich habe ein spezielles Problem.

Meine Buchungstabelle hat Buchungen im Format
ID-Datum-KontoID-Betrag-Be merkung

KontoIDs sind unterschiedliche Einnahmearten, z. B. gibt es "Ein19" für Einnahmen inkl. 19% USt, "Ein7" für Einnahmen inkl. 7%, usw., bei Aus19 und Aus7 das gleiche.

Jetzt hätte ich gerne eine Abfrage, die eine Tabelle liefert mit:
1. Spalte Datum
2. Spalte Ein19
3. Spalte Ein7
4. Spalte Aus19
5. Spalte Aus7

Es sollen alle Buchungssätze angezeigt werden, d. h. jede Zeile soll, bis auf Datum in Spalte 1 und die Spalte für das einschlägige Konto, leere Zellen anzeigen.

Etwa so:

Code: Alles auswählen

Datum         Ein19       Ein7        Aus19        Aus7
11.12.14     119,00
12.12.14                  107,00
12.12.14                                           28,00
Geht so etwas, und wenn ja wie?

Gruß
Freischreiber
Zuletzt geändert von Freischreiber am Fr 9. Jan 2015, 16:46, insgesamt 4-mal geändert.
Freischreiber nutzt seit 1/2025 LibreOffice Version 7.2.7.2 unter Windows 11 und SplitDB mit HSQL 2.7.4.
Lesenswert: https://wiki.documentfoundation.org/ReleasePlan/de

gogo
* LO-Experte *
Beiträge: 1081
Registriert: Sa 5. Feb 2011, 19:07

Re: Abfrage mit mehreren Spalten für ein Feld?

Beitrag von gogo » Fr 12. Dez 2014, 08:51

Das waere eine Pivot- oder Kreuztabelle, das kann man aber auf den meisten Datenbanksystemen nicht (oder nur SEHR komplex) realisieren, ausser man verwendet eine vorgefertigte Tabelle als "Zwischenspeicher" und befuellt diese dann mit den aktuellen Daten.
Mit Bordmitteln alleine nicht zu bewaeltigen - da brauchst Du Makros.

Alternativ: Select Datum, KontoID, sum(Betrag) as Summe from Buchungstabelle group by Datum, KontoID
g
2008 LucidL./MaverickM./WinXP LibreOffice 3.3.2 > 02/13 LinuxMint13/Xubuntu > 09/13 Debian Wheezy+LO3.5.4.2 > 01/15 Debian Jessie KDE+LO4.3.3.2/Mint17 openbox auf USB+LO4.2.8.2 > 03/16 ArchLin & LO5.1+ff > 02/18 Kubuntu

Freischreiber
* LO-Experte *
Beiträge: 830
Registriert: Fr 28. Mär 2014, 10:41

Re: Abfrage mit mehreren Spalten für ein Feld?

Beitrag von Freischreiber » Fr 12. Dez 2014, 09:10

Hallo gogo,

ganz genau, diese sehr übersichtlichen Pivottabellen habe ich in Excel kennengelernt, wo meine Daten herkommen.

Deine Abfrage sieht ziemlich gut aus, vielen Dank, nur die Verteilung auf mehrere Spalten wäre halt noch schön.

Jetzt habe ich ja bei F3KTotal in einem Video gesehen, daß man Base-Abfragen sehr gut zu Calc schicken kann:
https://www.youtube.com/watch?v=eqZHdqqtEKE

Kann man dort nicht eine solche gruppierte Abfrage "auseinanderziehen" auf mehrere Spalten?

Gruß
Freischreiber
Freischreiber nutzt seit 1/2025 LibreOffice Version 7.2.7.2 unter Windows 11 und SplitDB mit HSQL 2.7.4.
Lesenswert: https://wiki.documentfoundation.org/ReleasePlan/de

gogo
* LO-Experte *
Beiträge: 1081
Registriert: Sa 5. Feb 2011, 19:07

Re: Abfrage mit mehreren Spalten für ein Feld?

Beitrag von gogo » Fr 12. Dez 2014, 09:39

in Clac:

Daten/Datenpilot

"Datum" auf "Row Fields" ziehen
"Konto" auf "Column Fields" ziehen
"Betrag" auf "Data Fields" ziehen
(hab hier nur eine englische Version...)
g
2008 LucidL./MaverickM./WinXP LibreOffice 3.3.2 > 02/13 LinuxMint13/Xubuntu > 09/13 Debian Wheezy+LO3.5.4.2 > 01/15 Debian Jessie KDE+LO4.3.3.2/Mint17 openbox auf USB+LO4.2.8.2 > 03/16 ArchLin & LO5.1+ff > 02/18 Kubuntu

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

Re: Abfrage mit mehreren Spalten für ein Feld?

Beitrag von RobertG » Sa 13. Dez 2014, 17:25

Hallo Freischreiber,

versuche es mit einer korrelierenden Unterabfrage:

Code: Alles auswählen

SELECT "a"."Datum", (SELECT "Betrag" FROM "Buchungstabelle" WHERE "KontoID" = 'Ein19' AND "ID" = "a"."ID") AS "Ein19", (SELECT "Betrag" FROM "Buchungstabelle" WHERE "KontoID" = 'Ein7' AND "ID" = "a"."ID") AS "Ein7" FROM "Buchungstabelle"
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

F3K Total
* LO-Experte *
Beiträge: 2501
Registriert: So 10. Apr 2011, 10:10

Re: Abfrage mit mehreren Spalten für ein Feld?

Beitrag von F3K Total » Sa 13. Dez 2014, 18:33

... oder mit

Code: Alles auswählen

LEFT JOIN
ala

Code: Alles auswählen

SELECT 
    "BUCHUNGEN"."Datum", 
    "a"."Betrag" "Ein19", 
    "b"."Betrag" "Ein7" , 
    "c"."Betrag" "Aus19" , 
    "d"."Betrag" "Aus7" 
FROM  
    "BUCHUNGEN" 
    LEFT JOIN "BUCHUNGEN" AS "a" 
    ON ("BUCHUNGEN"."ID" = "a"."ID" AND "a"."KontoID" = 0)
    LEFT JOIN "BUCHUNGEN" AS "b" 
    ON ("BUCHUNGEN"."ID" = "b"."ID" AND "b"."KontoID" = 1)
    LEFT JOIN "BUCHUNGEN" AS "c" 
    ON ("BUCHUNGEN"."ID" = "c"."ID" AND "c"."KontoID" = 2)
    LEFT JOIN "BUCHUNGEN" AS "d" 
    ON ("BUCHUNGEN"."ID" = "d"."ID" AND "d"."KontoID" = 3)
ORDER BY 
    "BUCHUNGEN"."Datum"
Gruß R
Dateianhänge
Left_Join.zip
(26.73 KiB) 125-mal heruntergeladen
Windows 11: AOO, LO Linux Mint: AOO, LO

Freischreiber
* LO-Experte *
Beiträge: 830
Registriert: Fr 28. Mär 2014, 10:41

Re: Abfrage mit mehreren Spalten für ein Feld?

Beitrag von Freischreiber » So 14. Dez 2014, 11:01

Hallo!

Vielen Dank für eure Tips! Das mit der Pivottabelle in Calc hat auf Anhieb geklappt, die aktualisiert sich sogar beim Neuladen der Tabelle.

Die beiden anderen Lösungen probier ich aus, sobald ich wieder sitzen kann - ich hab gestern meine ganzen alten Daten aus den Tabellen in die Datenbank geholt, 12 Stunden lang. Einmal und nie wieder.

Wenn es jemanden interessiert: lieber holprig mit einer Datenbank anfangen, als jahrelang Tabellen ansammeln und irgendwann merken, daß man einen Haufen Unsinn eintippt, wenn es keine Integritätsprüfung gibt :oops:

Also: vor allem vielen Dank an RobertG und F3KTotal für die Unterstützung. Die nächsten Fragen kommen bestimmt, aber später :ugeek:

Viele Grüße
Freischreiber
Freischreiber nutzt seit 1/2025 LibreOffice Version 7.2.7.2 unter Windows 11 und SplitDB mit HSQL 2.7.4.
Lesenswert: https://wiki.documentfoundation.org/ReleasePlan/de

Freischreiber
* LO-Experte *
Beiträge: 830
Registriert: Fr 28. Mär 2014, 10:41

Re: Abfrage mit mehreren Spalten für ein Feld?

Beitrag von Freischreiber » Mi 17. Dez 2014, 16:09

Hallo,

habe gerade die Abfrage von F3K Total ausprobiert und bin fasziniert. Nur zum Verständnis: auch das sind korrelierende Unterabfragen, oder? Gleich 4 Stück?

Und das LEFT JOIN führt dazu, daß alle Zellen zu einem Datum reinkommen, wenn es zu dem Datum auch nur eine Buchung zu einem Buchungskonto gibt?

Editierbar sind diese Abfragen wohl generell nicht, wegen des JOIN? Ist aber genau richtig für meine Zwecke...

Hin und weg,
Freischreiber
Freischreiber nutzt seit 1/2025 LibreOffice Version 7.2.7.2 unter Windows 11 und SplitDB mit HSQL 2.7.4.
Lesenswert: https://wiki.documentfoundation.org/ReleasePlan/de

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

Re: Abfrage mit mehreren Spalten für ein Feld?

Beitrag von RobertG » Mi 17. Dez 2014, 18:27

Hallo Freischreiber,

das mit dem LEFT JOIN muss sein, damit auf jeden Fall alle Datensätze aus "Buchungen" abgebildet werden.
Die Abfrage ist keine korrelierende Unterabfrage. Vielmehr wird die gleiche Tabelle mehrmals direkt angesprochen und jeweils mit einem Alias versehen. Mit dem Alias "a" spricht Du alle Werte an, die bei "KontoID" = 0 sind. Das geht aus der Bedingung für die Tabelle "a" hervor. "a" hat also nicht so viele Datensätze wie "Buchungen". Würde kein LEDFT JOIN gesetzt, so würde die Abfrage insgesamt nichts anzeigen.

Dass die Abfrage nicht editierbar ist hat viele gründe. Einer ist, dass der Primärschlüssel der verschiedenen Tabellen fehlt. Der andere ist, dass mehrere Tabellen mit einem Alias angesprochen werden. Die Editierbarkeit funktioniert nur dann, wenn lediglich eine Tabelle mit einem alias angesprochen wird und von allen betroffenen Tabellen der Primärschlüssel enthalten ist. Und auch da ist Vorsicht geboten, da manche Rechnungen nicht richtig aktualisiert werden.

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

Freischreiber
* LO-Experte *
Beiträge: 830
Registriert: Fr 28. Mär 2014, 10:41

Re: Abfrage mit mehreren Spalten für ein Feld?

Beitrag von Freischreiber » Do 18. Dez 2014, 10:28

Hallo Robert,

ok, dieselbe Tabelle wird viermal abgefragt und jeweils nach einer anderen KontoID gefiltert? Es wird entweder der Betrag oder, wenn keiner da ist, Null angezeigt? Tatsächlich werden ja auch Tage angezeigt, an denen es gar keine Buchung gab für diese vier Konten.

Jetzt habe ich schon wieder das nächste Problem: Weil ich die Abfrage um eine Spalte "Auftragsnummer" aus der t-aufträge erweitern will, mache ich das bisher so:

SELECT "t-aufträge"."ID",
"BUCHUNGEN"."Datum",
"a"."Betrag" "Ein19",
"b"."Betrag" "Ein7" ,
"c"."Betrag" "Aus19" ,
"d"."Betrag" "Aus7"
FROM
"t-aufträge", "BUCHUNGEN"
LEFT JOIN "BUCHUNGEN" AS "a"
ON ("BUCHUNGEN"."ID" = "a"."ID" AND "a"."KontoID" = 0)
LEFT JOIN "BUCHUNGEN" AS "b"
ON ("BUCHUNGEN"."ID" = "b"."ID" AND "b"."KontoID" = 1)
LEFT JOIN "BUCHUNGEN" AS "c"
ON ("BUCHUNGEN"."ID" = "c"."ID" AND "c"."KontoID" = 2)
LEFT JOIN "BUCHUNGEN" AS "d"
ON ("BUCHUNGEN"."ID" = "d"."ID" AND "d"."KontoID" = 3)
WHERE "t-aufträge"."ID" = "Buchungen"."AuftragsID"
ORDER BY
"BUCHUNGEN"."Datum"

Das klappt auch, aber es werden keine Buchungen mit angezeigt, wo AuftragsID leer ist. Solche habe ich aber auch.

Ich habe es versucht mit
LEFT JOIN "BUCHUNGEN" on ("t-aufträge"."ID" = "BUCHUNGEN"."AuftragsID")
anstatt des WHERE

aber dabei stürzt Base ab.
Woran könnte das liegen? Bzw. wie geht es richtig?

Gruß
Freischreiber
Freischreiber nutzt seit 1/2025 LibreOffice Version 7.2.7.2 unter Windows 11 und SplitDB mit HSQL 2.7.4.
Lesenswert: https://wiki.documentfoundation.org/ReleasePlan/de


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