Jeg tror, at det burde gøre det, hvis du tilføjer følgende kasusudtryk til din select-sætning:
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
Dette har dog en masse gentagelseskode (Owed-beregningen), så jeg ville pakke den oprindelige forespørgsel ind i et almindeligt tabeludtryk og gøre det sådan:
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
Dette vil vende tilbage til beregnede TotalDeductions, hvis det trækkes fra det Skyldede efterlader et resultat over FromMinimumReturn, ellers returnerer det 0 for TotalDeductions.