sql >> データベース >  >> RDS >> Sqlserver

SQLで計算を実行する

    select ステートメントに次の case 式を追加する必要があると思います:

    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
    

    ただし、これには多くの繰り返しコード (Owed 計算) が含まれているため、元のクエリを共通のテーブル式でラップして、次のようにします。

    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
    

    これは、Owed から減算した結果が FromMinimumReturn を超える場合、計算された TotalDeductions に戻ります。それ以外の場合は、TotalDeductions に 0 が返されます。




    1. 空でないフィールドをカウントするmysql

    2. テーブルを更新するときに読み取りを防止する

    3. SQLServerのツリー構造データクエリ

    4. SQL2つの異なるテーブルの2つの列を比較する方法