Hallo,
ich habe folgende 3 Tabellen aus denen ich nicht bezahlte Rechnungen ermitteln möchte:
Code:
FibuBuchung (hier sind alle Zahlungen enthalten)
------------
Gegenkonto
Konto
Betrag
...
Vorgang (hier sind alle Rechungen enthalten)
-------
VgNr
Brutto
...
VorgangPos (hier sind alle Positionen der Rechnungen enthalten)
-----------
PosNr
VgNr
Artikel
...
Das mache ich bisher so. Das klappt auch:
SQL-Code:
select
v.VgNr,
v.brutto,
sum(case
when gegenkonto >= 10000 and gegenkonto <= 69999 then Betrag
when konto >= 10000 and konto <= 69999 then -Betrag
end)
as Offen
from
FibuBuchung b
left join
Vorgang v on b.vgnr = v.vgnr
group by
v.VgNr,
v.brutto
order by
v.VgNr
Ergebnis ist dann z.B.
Code:
VgNr Brutto Offen
2018-0038 10.234 -10.234
2018-0078 123 -50
Nun möchte ich zu jedem Vorgang (=Rechnung) die zugehörigen Positionen (=Artikel) in einer weiteren Spalte ausgeben:
Code:
VgNr Brutto Offen Positionen
2018-0038 10.234 -10.234 PC, Monitor, Fax
2018-0078 123 -50 Tastatur, Maus
Dazu habe ich den
SQL-Ausdruck wie folgt ergänzt:
SQL-Code:
select
v.VgNr,
v.brutto,
sum(case
when gegenkonto >= 10000 and gegenkonto <= 69999 then Betrag
when konto >= 10000 and konto <= 69999 then -Betrag
end)
as Offen,
LIST (VorgangPos.Artikel, ', ') as Positionen <---- NEU
from
FibuBuchung b
left join
Vorgang v on b.vgnr = v.vgnr
left join <---- NEU
VorgangPos on v.VgNr = VorgangPos.VgNr <---- NEU
group by
v.VgNr,
v.brutto
order by
v.VgNr
Das ergibt folgendes Problem:
Zwar sind die Positionen und aufgelsitet, der offene Betrag wird aber so oft aufsummiert, wie es Positionen gibt. Gibt es z.B. 3 Position, ist der offene Betrag 3x so hoch wie er eigentlich sein sollte:
Code:
VgNr Brutto Offen Positionen
2018-0038 10.234 -30.702 PC, Monitor, Fax
2018-0078 123 -100 Tastatur, Maus
Wer kann helfen? Vielen Dank im Voraus!