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 aus tbl_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
    

Anmelden zum Antworten