Neuigkeiten:

Wenn ihr euch für eine gute Antwort bedanken möchtet, im entsprechenden Posting einfach den Knopf "sag Danke" drücken!

Mobiles Hauptmenü

Kombination verschiedener Abfragekriterien

Begonnen von Paule, September 26, 2016, 10:27:59

⏪ vorheriges - nächstes ⏩

Paule

Hallo,
ich habe ein Listenfeld, dessen Abfrage ich gerade an meine Wünsche anpassen möchte.

In diesem Listenfeld werden verschiedene Ratenzahlungs-Datensätze gezeigt (sprich mit ID, Datum, Summe etc.).

Diese entstammen der Tabelle CF_InstallmentsT, in der alle Raten entsprechend gespeichert sind.

Nun möchte ich im Listenfeld alle Raten aus CF_InstallmentsT sehen, aus denen noch offene Forderungen gegenüber dem Kunden bestehen.
Das heißt, ich möchte sehen:
A) Alle InstallmentID's zu denen es noch kein Repayment gibt
B) Alle InstallmentID's, die nur teilweise bezahlt wurden.

Die Angaben zu den Repayments finden sich in der Tabelle CF_InstallmentRepayment. Dort werden die einzelnen Repayments den InstallmentID's über FK zugeordnet (1:n). Heißt: Zu einem InstallmentID kann es mehrere Repayments geben (der Kunde zahlt teilweise stückchenweise).

Ich habe das Ganze jetzt versucht zu implementieren im Listenfeld mit folgendem Code:


SELECT CF_InstallmentsT.InstallmentID, CF_InstallmentsT.ReferingSale, CF_InstallmentsT.InstallmentDate, CF_InstallmentsT.InstallmentSum, CF_InstallmentsT.Notes
FROM CF_InstallmentsT LEFT JOIN CF_InstallmentRepayment ON CF_InstallmentsT.InstallmentID = CF_InstallmentRepayment.InstallmentNo
WHERE (((CF_InstallmentsT.ReferingSale) Like [TempVar]![EditInstSalesID]) AND ((CF_InstallmentsT.InstallmentSum)>[CF_InstallmentRepayment].[RepaymentAmount])) OR (((CF_InstallmentsT.ReferingSale) Like [TempVar]![EditInstSalesID]) AND ((CF_InstallmentRepayment.RepaymentDate) Is Null));


Hier werden mir die entsprechenden Installments angezeigt.

Ich habe nur festgestellt, dass wenn ich:
A) Für eine InstallmentID nur ein Repayment anlege, welches die Installment-Summe nicht vollständig abdeckt, mir das Installment entsprechend als offen im Listenfeld angezeigt wird. Z.B. ist die Installment Summe 10.000 und ich habe ein Repayment von 5.000 angelegt. Entsprechend ist dieses Installment noch "offen" - zumindest 5.000 davon.

B) Dann noch ein zweites Repayment zu der oben genannten Installment anlege (nochmal 5.000), damit dieses Installment "abbezahlt" ist (5000+5000), so müsste mir dieses Installment im Listenfeld nicht mehr angezeigt werden, denn die 10.000 sind ja bezahlt wurden (allerdings über 2 Repayment und nicht nur eines). Stattdessen zeigt er mir aber im Listenfeld 2x die bezogene InstallmentID an.

Liegt das an meiner Join-Anweisung?

Wie kann ich den Fall abdecken, dass ein Installment über mehrere Repayments abbezahlt wird und nicht nur über eines (bei einem Repayment gibt es mit dem SQL-Code von oben kein Problem).
Wäre um einen Hinweis sehr dankbar!

Paule

Ich hatte es so probiert:


SELECT CF_InstallmentsT.InstallmentID, CF_InstallmentsT.Notes, CF_InstallmentsT.InstallmentSum, CF_InstallmentsT.InstallmentDate

FROM CF_InstallmentsT LEFT JOIN CF_InstallmentRepayment ON CF_InstallmentsT.InstallmentID = CF_InstallmentRepayment.InstallmentNo

WHERE ((CF_InstallmentsT.ReferingSale)=[RepaymentSales])
AND ((CF_InstallmentRepayment.RepaymentID) Is Null))

OR ((CF_InstallmentsT.ReferingSale)=[RepaymentSales])
AND ((Sum([CF_InstallmentRepayment].[RepaymentAmount]))<[CF_InstallmentsT].[InstallmentSum]));


Damit wollte ich ausdrücken, dass wenn es mehrere Repayments zu ein und demselben InstallmentID gehören, er diese Repayments zusammenrechnen soll um dann zu schauen, ob die Summe der Repayments noch immer kleiner ist, als die InstallmentSum. In diesem Fall, sollte mir das Installment zur Auswahl stehen. Wenn die Summe der Repayments größer gleich InstallmentSum sind, dann soll er mir das Installment nicht anzeigen, da nichts mehr "offen" ist.

Hier zeigt er mir aber als Fehler an, dass eine Aggregatfunktion in Where- Klauseln nicht möglich ist.