Ich denke, das Hinzufügen des folgenden case-Ausdrucks zu Ihrer select-Anweisung sollte es tun:
CASE WHEN
SUM(LandingDetails.Quantity * LandingDetails.UnitPrice)
-
SUM(LandingDetails.Quantity * LandingDetails.UnitPrice) * DeductionRate + WeeklyDeductionRate
> FromMinimumReturn
THEN SUM(LandingDetails.Quantity * LandingDetails.UnitPrice) * DeductionRate + WeeklyDeductionRate
ELSE 0 END
AS TotalDeductions
Dies hat jedoch eine Menge sich wiederholenden Code (die geschuldete Berechnung), also würde ich die ursprüngliche Abfrage in einen allgemeinen Tabellenausdruck einschließen und es so machen:
WITH cte AS (
<<<your original query here>>> -- I left it out to save space...
)
SELECT
ContactId,
Owed,
WeeklyDeductionRate,
FromMinimumReturn,
DeductionRate,
CASE
WHEN Owed - (Owed * DeductionRate + WeeklyDeductionRate) > FromMinimumReturn
THEN Owed * DeductionRate + WeeklyDeductionRate
ELSE 0 END
AS TotalDeductions
FROM cte
Dies wird zu den berechneten TotalDeductions zurückkehren, wenn die Subtraktion von den geschuldeten Ergebnissen ein Ergebnis über FromMinimumReturn hinterlässt, andernfalls wird 0 für TotalDeductions zurückgegeben.