brauche Hilfe bei sql-Anweisung über 3 Tabellen für Abrechnung
-
Hallo liebe Leute, ich brauche dringend bitte Eure Hilfe!
Für eine Vereinsverwaltung muss ich ausstehende Mitgliedsbeiträge ermitteln. Das Setup sieht bisher so aus:
[u]tbl_Mitglieder[/u] id, Name, [b]Beitrittsdatum [/b]etc...
[u]tbl_Beiträge[/u] id_beitrag | number id_mitgl | number [i]fremdschlüssel[/i] id_stichtag | number [i]fremdschlüssel[/i] datum | date betrag | number
[u]tbl_Stichtag[/u] id_stichtag | number datum | date [i](von 1.1.1987 bis 1.1.2012 1 record/Jahr)[/i] betrag | number
Die Ermittlung der ausstehenden Beträge soll folgendermassen vor sich gehen:
Aus der Summe der Beträge aus
tbl_Stichtag
, deren Datumswerte > das Beitrittsdatum des Mitglieds sind und der Summe der Beträge austbl_Beiträge
von dem jeweiligen Mitglied soll die Differenz gebildet werden.Mit
select m.id_mitgl, sum(b.betrag) from tbl_beitraege b, tbl_Mitglieder m where m.id_mitgl = b.id_mitgl group by m.id_mitgl
bekomme ich schon die Summe der eingezahlten Beträge. Wenn ich das jetzt aber mit der Gegensumme aus der Stichtags-Tabelle verrechnen möchte, wirds ziemlich kritisch.
Diese alleine bringt schon falsche Ergebnisse zustande:
select m.id_mitgl, sum(s.betrag) from tbl_stichtag s, tbl_Mitglieder m where s.datum_beitritt > s.datum group by m.id_mitgl
Ich möchte Euch gar nicht den Kaudawelsch posten, den ich versucht habe...
Ich komme eher aus der Java-Richtung und damit das zu berechnen, wäre kein Problem, aber in sql habe ich leider noch nicht so viele Erfahrungen. Wahrscheinlich braucht man da eine Verschachtelung bei den
select
s. Ich knobel jetzt schon ein paar Stunden an dem Problem. Ich hoffe sehr, Ihr könnt mir helfen!Schonmal vielen Dank, Grüße
Tobi
-
muss das hier:
select m.id_mitgl, sum(s.betrag) from tbl_stichtag s, tbl_Mitglieder m where s.datum_beitritt > s.datum group by m.id_mitgl
nicht mit < geschrieben sein?
oder mit <= ?
-
Dank, jenz, Du hast sogar recht! aber das löst das eigentliche Problem noch nicht, beide Abfragen zu verbinden, ohne dass sie sich selbst ausschließen. Da braucht man in sql glaube ich noch ein etwas komlexeres Konstrukt.
-
ach so, da ginge zum beispiel so etwas:
select (select sum(...) from x,y,z where x.id_mitgl = tbl_Mitglieder.id_mitgl) as ist_summe, (select sum(...) from x,y,z where x.id_mitgl = tbl_Mitglieder.id_mitgl) as soll_summe from tbl_Mitglieder