schneerunzel
Goto Top

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.

Content-Key: 389611

Url: https://administrator.de/contentid/389611

Ausgedruckt am: 29.03.2024 um 09:03 Uhr

Mitglied: maretz
maretz 16.10.2018 um 19:52:03 Uhr
Goto Top
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.
Mitglied: schneerunzel
schneerunzel 16.10.2018 um 20:50:36 Uhr
Goto Top
Hallo,
Da haben wir an einander vorbei gesprochen.
In der Tabelle sachkonten, habe ich alle sachkonten drin. Ich habe aber in Buchungen bzw Haushalt Planung nicht alle sachkonten. Sobald ein sachkonten in Buchungen oder in Haushalt Planung auftaucht, soll es ausgegeben werden
Mitglied: SlainteMhath
SlainteMhath 17.10.2018 um 07:41:36 Uhr
Goto Top
Moin,

das sollte sich mit einem UNION machen lassen, oder nicht?

Pseudo-SQL
<select .. left join für alle bebuchten sachkonten>
UNION
<select ... join für alle planung ohne babuchtes konto>

ungetestet und mit nur einer halben Tasse Kaffe im Blut face-smile

lg,
Slainte
Mitglied: StefanKittel
StefanKittel 17.10.2018 um 07:42:12 Uhr
Goto Top
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
Mitglied: MadMax
Lösung MadMax 17.10.2018 um 14:29:25 Uhr
Goto Top
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:
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
Mitglied: schneerunzel
schneerunzel 25.10.2018 um 10:49:57 Uhr
Goto Top
Vielen Dank.

Ich stand auf dem Schlauch. Ich kann die Sachkonte ja als Basis nehmen...