Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Извършване на изчисления в sql

Мисля, че добавянето на следния case израз към вашия оператор select трябва да го направи:

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

Това обаче има много повтарящ се код (изчислението на дълга), така че бих обвил оригиналната заявка в израз на обща таблица и бих го направил така:

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

Това ще се върне към изчислените TotalDeductions, ако изваждането му от Owed остави резултат над FromMinimumReturn, в противен случай ще върне 0 за TotalDeductions.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Поправете „SQL Server блокира достъпа до STATEMENT „OpenRowset/OpenDatasource“ на компонент „Ad Hoc разпределени заявки“

  2. Как да прехвърлите DateTime към Time

  3. Защо [date] + ([time] - [offset]) е недетерминиран в SQL Server 2008?

  4. Как да върнете низ в обратен ред с помощта на SQL Server – REVERSE()

  5. Редове до стойности, разделени със запетая, с помощта на XML таг