MySQL: Haushaltsüberwachungs Report
Hallo zusammen,
ich versuche gerade eine Auswertung Report für unsere Buchhaltungssoftware zu bauen.
Dabei geht es darum, die tatsächlichen Einnahmen und Ausgaben gegen die geplanten Beträge zu stellen.
Dazu haben ich 3 Tabellen (hier deutlich vereinfacht):
Buchungen:
ID, SachkontoID, Betrag, Buchungstext
Sachkonten:
ID, Nummer, Bezeichnung, etc.
Haushalt_planung:
ID, SachkontoID, geplanterbetrag, Bemerkung
Ich möchte jetzt folgendes haben:
Es soll eine Liste dabei rauskommen, bei der die Abweichungen zum Haushalt aufgelistet werden.
Dazu muss ich alle Sachkonten die bebucht wurden (sprich alle Sachkonten aus der Tabelle Buchungen) den geplanten Beträgen aus der Haushalt_planung gegenüberstellen. Das ist ja noch kein Problem. (Es kann vorkommen, das ein Sachkonto bebucht wurde, welches nicht mit im Haushalt berücksichtigt wurde). Das kann man ja ganz einfach durch einen left Join lösen.
Jetzt kann es aber auch in die andere Richtig vor kommen, sprich es sind Gelder für Sachkonten im Haushalt vorgesehen, die überhaupt nicht abgerufen wurden. Sprich ich habe in der Haushaltstabelle eine Eintrag für ein Sachkonte, welches in der Buchungstabelle gar nicht vorkommt. wie baue ich das ein?
In der Abfrage müssten also sowohl die Sachkonten aus der Tabelle Haushalt_planung als auch die verwendeten Sachkonten aus der Tabelle Buchungen berücksichtigt werden und sollte eine Sachkonte nicht in der anderen Tabelle vorkommen mit 0 oder Null ausgegeben werden.
Da ich nicht einmal weiß, wie ich das googlen soll, wende ich mich an Euch...
Vielen Dank für Eure Hilfe.
ich versuche gerade eine Auswertung Report für unsere Buchhaltungssoftware zu bauen.
Dabei geht es darum, die tatsächlichen Einnahmen und Ausgaben gegen die geplanten Beträge zu stellen.
Dazu haben ich 3 Tabellen (hier deutlich vereinfacht):
Buchungen:
ID, SachkontoID, Betrag, Buchungstext
Sachkonten:
ID, Nummer, Bezeichnung, etc.
Haushalt_planung:
ID, SachkontoID, geplanterbetrag, Bemerkung
Ich möchte jetzt folgendes haben:
Es soll eine Liste dabei rauskommen, bei der die Abweichungen zum Haushalt aufgelistet werden.
Dazu muss ich alle Sachkonten die bebucht wurden (sprich alle Sachkonten aus der Tabelle Buchungen) den geplanten Beträgen aus der Haushalt_planung gegenüberstellen. Das ist ja noch kein Problem. (Es kann vorkommen, das ein Sachkonto bebucht wurde, welches nicht mit im Haushalt berücksichtigt wurde). Das kann man ja ganz einfach durch einen left Join lösen.
Jetzt kann es aber auch in die andere Richtig vor kommen, sprich es sind Gelder für Sachkonten im Haushalt vorgesehen, die überhaupt nicht abgerufen wurden. Sprich ich habe in der Haushaltstabelle eine Eintrag für ein Sachkonte, welches in der Buchungstabelle gar nicht vorkommt. wie baue ich das ein?
In der Abfrage müssten also sowohl die Sachkonten aus der Tabelle Haushalt_planung als auch die verwendeten Sachkonten aus der Tabelle Buchungen berücksichtigt werden und sollte eine Sachkonte nicht in der anderen Tabelle vorkommen mit 0 oder Null ausgegeben werden.
Da ich nicht einmal weiß, wie ich das googlen soll, wende ich mich an Euch...
Vielen Dank für Eure Hilfe.
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 389611
Url: https://administrator.de/forum/mysql-haushaltsueberwachungs-report-389611.html
Ausgedruckt am: 06.04.2025 um 17:04 Uhr
6 Kommentare
Neuester Kommentar
Moin,
wenn ich das richtig verstehen ist die Antwort: GAR NICHT. Wenn du bei Haushalt_planung einen Eintrag machen willst muss zwingend die ID in Sachkonten drin sein.... Uebliche Lösung für das Problem: Ein Konto "Anderes" bei dem du dann im Beschreibungstext die Details angeben musst. Aber ansonsten hast du nen NULL-Value da drin. Geht natuerlich auch (...or xyz = NULL) aber würde es dir später schwer machen.
wenn ich das richtig verstehen ist die Antwort: GAR NICHT. Wenn du bei Haushalt_planung einen Eintrag machen willst muss zwingend die ID in Sachkonten drin sein.... Uebliche Lösung für das Problem: Ein Konto "Anderes" bei dem du dann im Beschreibungstext die Details angeben musst. Aber ansonsten hast du nen NULL-Value da drin. Geht natuerlich auch (...or xyz = NULL) aber würde es dir später schwer machen.
Moin,
ich würde es mit einer Zwischentabelle lösen, statt mit einer komplexen Abfrage den Report zu füttern.
Also Tabelle leeren und dann durch mehrere Abfragen füllen.
Und dann die Abfrage z.B: von Buchungen zur Planung und danach von Planung zur Buchung.
Dann doppelt filtern und fertig.
Der Report greift auf diese Tabelle zu.
MySQL macht das selber intern bei vielen Abfragen so.
Stefan
ich würde es mit einer Zwischentabelle lösen, statt mit einer komplexen Abfrage den Report zu füttern.
Also Tabelle leeren und dann durch mehrere Abfragen füllen.
Und dann die Abfrage z.B: von Buchungen zur Planung und danach von Planung zur Buchung.
Dann doppelt filtern und fertig.
Der Report greift auf diese Tabelle zu.
MySQL macht das selber intern bei vielen Abfragen so.
Stefan
Hallo schneerunzel,
zwar habe ich noch nicht ganz verstanden, wie genau Du jetzt eine geplante Buchung einer tatsächlichen zuordnest oder ob das summiert auf das Sachkonto passiert. Aber wenn ich das richtig verstanden habe, dann machst Du momentan ein:
Dann könntest Du statt einem left join ein full join verwenden, das wirkt wie ein left join und right join gleichzeitig:
Oder Du verwendest als führende Tabelle Deine Sachkonten und bindest sowohl Buchungen als auch Haushalt_planung mit left join ein. Damit nur bebuchte Sachkonten ausgegeben werden, kann darauf geprüft werden, daß mindestens in einer der beiden Tabellen ein Eintrag ist:
Gruß, Mad Max
zwar habe ich noch nicht ganz verstanden, wie genau Du jetzt eine geplante Buchung einer tatsächlichen zuordnest oder ob das summiert auf das Sachkonto passiert. Aber wenn ich das richtig verstanden habe, dann machst Du momentan ein:
select ...
from Buchungen
left join Haushalt_planung on ...
Dann könntest Du statt einem left join ein full join verwenden, das wirkt wie ein left join und right join gleichzeitig:
select ...
from Buchungen
full join Haushalt_planung on ...
Oder Du verwendest als führende Tabelle Deine Sachkonten und bindest sowohl Buchungen als auch Haushalt_planung mit left join ein. Damit nur bebuchte Sachkonten ausgegeben werden, kann darauf geprüft werden, daß mindestens in einer der beiden Tabellen ein Eintrag ist:
select ...
from Sachkonten s
left join Buchungen b on b.SachkontoID = s.ID
left join Haushalt_planung p on p.SachkontoID = s.ID and ...
where b.ID is not null or p.ID is not null
Gruß, Mad Max