![]() |
Datenbank: Firebird • Version: 3.x • Zugriff über: IBDAC
Join: Datensätze sind mehrfach vorhanden, sollen sie aber nicht
Ich habe diese Tabellen:
Rechnung --------- ReNr Datum Netto ... MwSt -------- ReNr MwStSatz MwStBetrag ... Dabei kann es zu einem Rechnungs-Datensatz beliebig viele Datensätze in der MwSt-Tabelle geben. Da es Rechnungen geben kann, die mehere MwSt-Sätze enthalten. Ich möchte nun die Netto-Summe und MwSt-Summe aller Rechnungen eines Jahre ausgeben. Das mache ich so:
Code:
Das Problem ist hier nun, dass die Netto-Summe zu hoch ist, da durch den Join der MwSt-Tabelle einige Netto-Beträge der Rechnung doppelt gezählt werden. Wenn es z.B. 2 MwSt-Sätze gibt, erzeut der Join 2 Result-Datensätz. Dabei addiert sum(R.Netto) denn Nettobetrag der *selben* Rechung zwei mal! sum(M.MwStBetrag) addiert in den zwei Datensätzen die beiden MwStBeträge. Das ist ok.
select sum(R.Netto), sum(M.MwStBetrag)
from Rechnung R left join MwSt M on (R.ReNr = M.ReNr) where Datum >= '2020-01-01' and Datum <= '2020-12-31' Wie mache ich das richtig? |
AW: Join: Datensätze sind mehrfach vorhanden, sollen sie aber nicht
Nimm den Durchschnitt
SQL-Code:
select
sum(R.Netto)/count(R.ReNr) as Nett, sum(M.MwStBetrag)/count(R.ReNr) as MwSt from Rechnung R left join MwSt M on (M.ReNr = R.ReNr) where Datum >= '2020-01-01' and Datum <= '2020-12-31'; |
AW: Join: Datensätze sind mehrfach vorhanden, sollen sie aber nicht
Aber in den Rechnungspositionen muss doch irgenwo enthalten sein, welcher MwSt Satz jeweils verwendet wird. Das sollte doch gezielter zu joinen sein.
Und wenn nicht, wird dieses Problem überall auftauchen, wo Du diese Tabelle dazu joinst. |
AW: Join: Datensätze sind mehrfach vorhanden, sollen sie aber nicht
Select R.Netto, sum(M.MwStBetrag) MwStBetrag
From (select ReNr, sum(Netto) as Netto from Rechnung where Datum >= '2020-01-01' and Datum <= '2020-12-31' Group ByReNr ) R LEFT JOIN MwSt M on (R.ReNr = M.ReNr) Group By R.Netto |
AW: Join: Datensätze sind mehrfach vorhanden, sollen sie aber nicht
Zitat:
|
AW: Join: Datensätze sind mehrfach vorhanden, sollen sie aber nicht
Zitat:
|
AW: Join: Datensätze sind mehrfach vorhanden, sollen sie aber nicht
He BlueStarHH,
den Tipp von jobo würde ich mir an Deiner Stelle noch mal genauer ansehen, denn auf der einen Seite schreibst Du "... aus rechtlichen Gründen nicht nehmen ..." aber auf der anderen Seite gehst Du das Risiko ziemlich ungenauer Tabellenverknüpfungen ein. Grüße |
AW: Join: Datensätze sind mehrfach vorhanden, sollen sie aber nicht
Zitat:
An den Tabellenverknüpfungen ist nichts ungenau. Die Rechnungsnummern ist eindeutig, über die die Tabellen verknüpft sind. Die Zwischensummen aus den Artikelposition hingegen *sind* ungenau (Rundungsdifferenzen, das im Detail würde hier zu weit führen). |
AW: Join: Datensätze sind mehrfach vorhanden, sollen sie aber nicht
Warum nicht über ein Sub-Select?
SQL-Code:
select R.ReNr, R.Netto, (select sum(M.MwStBetrag) from MwSt M where M.ReNr = R.ReNr) MwStSumme
from Rechnung R where (R.Datum >= '2020-01-01') and (R.Datum <= '2020-12-31') |
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:02 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz