sql >> Base de Datos >  >> RDS >> Sqlserver

Realización de cálculos en sql

Creo que agregar la siguiente expresión de caso a su declaración de selección debería hacerlo:

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

Sin embargo, esto tiene mucho código repetitivo (el cálculo de la deuda), por lo que envolvería la consulta original en una expresión de tabla común y lo haría así:

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

Esto volverá a las Deducciones Totales calculadas si al restarlo de la Deuda deja un resultado superior a FromMinimumReturn; de lo contrario, devolverá 0 para las Deducciones Totales.