Hallo,
gegeben ist die DB aus dem Anhang (4 Tabellen).
Dazu passend habe ich eine Abfrage erstellt, die mir für die einzelnen Konten Summen über die einzelnen Monate bildet (ich habe mich bei der Abfrage hier nur mal auf 2 Monate und die Jahressumme beschränkt).
Im ersten Teil der Union wird die Abfrage für alle einzelnen Konten durchgeführt, im zweiten Teil dann gruppiert nach Ertrag und Aufwand, der vierte Teil stellt lediglich Überschriften bereit und im vierten Teil soll dann die Summe aus allen gebildet werden
Im Grunde ist das mehrmals die gleiche Abfrage, halt jeweils nur anders gruppiert.
Interessant ist das Konto mit der ID 4001: die Werte können auch aus der Tabelle "tbl_buchung_anpassung" kommen, bei der statt des Datums Monat und Jahr als Integer gespeichert werden. Beim "normalen" aufaddieren der einzelnen Konten werden die Werte ordentlich mitgezählt, wenn ich aber nach Konto-Typ oder gesamt gruppiere, dann fallen die Beträge aus dieser Tabelle unter den Tisch.
Ich hatte auch schon versucht diese Tabelle mithilfe eines LEFT JOIN zu integrieren (sowohl direkt, als auch als einfache Abfrage aus den relevanten Spalten), hatte dann aber das Problem, dass im Januar auf einmal 3000 statt 2000 herauskamen.
Hat da jemand eine kreative Idee?
Gruss,
Lenny
gegeben ist die DB aus dem Anhang (4 Tabellen).
Dazu passend habe ich eine Abfrage erstellt, die mir für die einzelnen Konten Summen über die einzelnen Monate bildet (ich habe mich bei der Abfrage hier nur mal auf 2 Monate und die Jahressumme beschränkt).
Im ersten Teil der Union wird die Abfrage für alle einzelnen Konten durchgeführt, im zweiten Teil dann gruppiert nach Ertrag und Aufwand, der vierte Teil stellt lediglich Überschriften bereit und im vierten Teil soll dann die Summe aus allen gebildet werden
PHP-Code:
################### Nummer 1 ###################
SELECT
konten.konto_id,
konten.konto_name,
SUM(IF(konten.konto_id IN(3806,3801,1401,1406),
IF(date_format(steuer.buchung_datum, '%m') = '01', steuer.steuer_betrag, 0),
IF(date_format(netto.zahlung_datum, '%m') = '01', netto.netto_betrag, 0)))
+
COALESCE((SELECT SUM(betrag_neu) FROM tbl_buchung_anpassung WHERE konto_id = konto_id_fk AND monat = 1), 0)
AS jan,
SUM(IF(konten.konto_id IN(3806,3801,1401,1406),
IF(date_format(steuer.buchung_datum, '%m') = '02', steuer.steuer_betrag, 0),
IF(date_format(netto.zahlung_datum, '%m') = '02', netto.netto_betrag, 0)))
+
COALESCE((SELECT SUM(betrag_neu) FROM tbl_buchung_anpassung WHERE konto_id = konto_id_fk AND monat = 2), 0)
AS feb,
SUM(IF(konten.konto_id IN(3806,3801,1401,1406), steuer.steuer_betrag, netto.netto_betrag))
+
COALESCE((SELECT SUM(betrag_neu) FROM tbl_buchung_anpassung WHERE konto_id = konto_id_fk), 0)
AS 'sum',
konten.konto_typ,
1 AS sortierung
FROM tbl_konten as konten
LEFT JOIN
tbl_buchung_netto as netto ON konten.konto_id = netto.konto_id_fk
LEFT JOIN
tbl_buchung_steuer as steuer ON konten.konto_id = steuer.konto_steuer_typ_id_fk
WHERE
konto_id IN (
SELECT konto_id_fk
FROM tbl_buchung_netto
WHERE date_format(zahlung_datum, '%Y') = '2009')
OR
konto_id IN (
SELECT konto_steuer_typ_id_fk
FROM tbl_buchung_steuer
WHERE date_format(buchung_datum, '%Y') = '2009')
GROUP BY
konten.konto_id,
konten.konto_typ
UNION
################### Nummer 2 ###################
SELECT
MAX(konten.konto_id) + 1 AS konto_id,
IF(konten.konto_typ = 'ertrag', 'Summe Einnahmen', 'Summe Ausgaben') AS konto_name,
SUM(IF(konten.konto_id IN(3806,3801,1401,1406),
IF(date_format(steuer.buchung_datum, '%m') = '01', steuer.steuer_betrag, 0),
IF(date_format(netto.zahlung_datum, '%m') = '01', netto.netto_betrag, 0)))
+
COALESCE((SELECT SUM(betrag_neu) FROM tbl_buchung_anpassung WHERE konto_id = konto_id_fk AND monat = 1), 0)
AS jan,
SUM(IF(konten.konto_id IN(3806,3801,1401,1406),
IF(date_format(steuer.buchung_datum, '%m') = '02', steuer.steuer_betrag, 0),
IF(date_format(netto.zahlung_datum, '%m') = '02', netto.netto_betrag, 0)))
+
COALESCE((SELECT SUM(betrag_neu) FROM tbl_buchung_anpassung WHERE konto_id = konto_id_fk AND monat = 2), 0)
AS feb,
SUM(IF(konten.konto_id IN(3806,3801,1401,1406), steuer.steuer_betrag, netto.netto_betrag))
+
COALESCE((SELECT SUM(betrag_neu) FROM tbl_buchung_anpassung WHERE konto_id = konto_id_fk), 0) AS 'sum',
konten.konto_typ,
1 AS sortierung
FROM tbl_konten as konten
LEFT JOIN tbl_buchung_netto as netto ON konten.konto_id = netto.konto_id_fk
LEFT JOIN tbl_buchung_steuer as steuer ON konten.konto_id = steuer.konto_steuer_typ_id_fk
WHERE
konto_id IN (
SELECT konto_id_fk
FROM tbl_buchung_netto
WHERE date_format(zahlung_datum, '%Y') = '2009')
OR
konto_id IN (
SELECT konto_steuer_typ_id_fk
FROM tbl_buchung_steuer
WHERE date_format(buchung_datum, '%Y') = '2009')
GROUP BY konten.konto_typ
UNION
################### Nummer 3 ###################
SELECT
0 AS konto_id,
IF(konten.konto_typ = 'ertrag', 'Einnahmen', 'Ausgaben') AS konto_name,
'' AS jan,
'' AS feb,
'' AS 'sum',
konten.konto_typ,
1 AS sortierung
FROM tbl_konten as konten
LEFT JOIN tbl_buchung_netto as netto ON konten.konto_id = netto.konto_id_fk
LEFT JOIN tbl_buchung_steuer as steuer ON konten.konto_id = steuer.konto_steuer_typ_id_fk
WHERE
konto_id IN (
SELECT konto_id_fk
FROM tbl_buchung_netto
WHERE date_format(zahlung_datum, '%Y') = '2009')
OR
konto_id IN (
SELECT konto_steuer_typ_id_fk
FROM tbl_buchung_steuer
WHERE date_format(buchung_datum, '%Y') = '2009')
GROUP BY konten.konto_typ
UNION
################### Nummer 4 ###################
SELECT
MAX(konten.konto_id) + 2 AS konto_id,
'Summe Gesamt' AS konto_name,
SUM(IF(konten.konto_id IN(3806,3801,1401,1406),
IF(date_format(steuer.buchung_datum, '%m') = '01', steuer.zahlung_steuerbetrag, 0),
IF(date_format(netto.zahlung_datum, '%m') = '01', netto.zahlung_betrag, 0)))
-
COALESCE((SELECT SUM(betrag_neu) FROM tbl_buchung_anpassung WHERE konto_id = konto_id_fk AND monat = 1), 0)
AS jan,
SUM(IF(konten.konto_id IN(3806,3801,1401,1406),
IF(date_format(steuer.buchung_datum, '%m') = '02', steuer.zahlung_steuerbetrag, 0),
IF(date_format(netto.zahlung_datum, '%m') = '02', netto.zahlung_betrag, 0)))
-
COALESCE((SELECT SUM(betrag_neu) FROM tbl_buchung_anpassung WHERE konto_id = konto_id_fk AND monat = 1), 0)
AS feb,
SUM(IF(konten.konto_id IN(3806,3801,1401,1406), steuer.zahlung_steuerbetrag, netto.zahlung_betrag))
-
COALESCE((SELECT SUM(betrag_neu) FROM tbl_buchung_anpassung WHERE konto_id = konto_id_fk), 0)
AS 'sum',
konten.konto_typ,
2 AS sortierung
FROM tbl_konten as konten
LEFT JOIN tbl_buchung_netto as netto ON konten.konto_id = netto.konto_id_fk
LEFT JOIN tbl_buchung_steuer as steuer ON konten.konto_id = steuer.konto_steuer_typ_id_fk
WHERE
konto_id IN (
SELECT konto_id_fk
FROM tbl_buchung_netto
WHERE date_format(zahlung_datum, '%Y') = '2009')
OR
konto_id IN (
SELECT konto_steuer_typ_id_fk
FROM tbl_buchung_steuer
WHERE date_format(buchung_datum, '%Y') = '2009')
ORDER BY sortierung, konto_typ DESC, konto_id
Im Grunde ist das mehrmals die gleiche Abfrage, halt jeweils nur anders gruppiert.
Interessant ist das Konto mit der ID 4001: die Werte können auch aus der Tabelle "tbl_buchung_anpassung" kommen, bei der statt des Datums Monat und Jahr als Integer gespeichert werden. Beim "normalen" aufaddieren der einzelnen Konten werden die Werte ordentlich mitgezählt, wenn ich aber nach Konto-Typ oder gesamt gruppiere, dann fallen die Beträge aus dieser Tabelle unter den Tisch.
Ich hatte auch schon versucht diese Tabelle mithilfe eines LEFT JOIN zu integrieren (sowohl direkt, als auch als einfache Abfrage aus den relevanten Spalten), hatte dann aber das Problem, dass im Januar auf einmal 3000 statt 2000 herauskamen.
Hat da jemand eine kreative Idee?
Gruss,
Lenny
Kommentar