Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Berechnungen in sql durchführen

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.