Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Wykonywanie obliczeń w sql

Myślę, że dodanie następującego wyrażenia przypadku do instrukcji select powinno wystarczyć:

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

Jednak ma to dużo powtarzającego się kodu (obliczanie Owed), więc owinąłbym oryginalne zapytanie we wspólne wyrażenie tabelowe i zrobiłbym to w ten sposób:

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

Spowoduje to powrót do obliczonych TotalDeductions, jeśli odjęcie go od należnej spowoduje wynik powyżej FromMinimumReturn, w przeciwnym razie zwróci 0 dla 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. Wywołanie procedury składowanej z typem danych XML

  2. Jak mogę ocenić tę tabelę?

  3. Konwertuj nazwę miesiąca na numer miesiąca w SQL Server

  4. Problem w dynamicznym przechylaniu + serwer sql 2005

  5. Napraw komunikat 241 „Konwersja nie powiodła się podczas konwersji daty i/lub czasu z ciągu znaków” w SQL Server