Tôi nghĩ rằng việc thêm biểu thức trường hợp sau vào câu lệnh chọn của bạn nên làm điều đó:
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
Tuy nhiên, điều này có rất nhiều mã lặp lại (phép tính Sở hữu), vì vậy tôi sẽ đặt truy vấn ban đầu trong một biểu thức bảng chung và thực hiện như sau:
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
Điều này sẽ trở lại TotalDeductions đã tính nếu trừ nó khỏi Owed để lại kết quả so với FromMinimumReturn, nếu không nó sẽ trả về 0 cho TotalDeductions.