Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

SQL Total Sum dengan pengurangan jika entri baru dibuat dalam tabel

Berdasarkan SQL Fiddle, saya membuat upaya baru, yang saya yakini benar, meskipun mengembalikan 81 dan bukan 100 untuk John:

;  with LP (CustomerId, Name, UserActions, TotalPoints) as (
SELECT
   C.CustomerId,
   C.Name,
   sum(case when P.LoyaltyPointsId = 4 then isnull(R.RedeemCount, 0) else 1 end),
   sum(P.Points * case when P.LoyaltyPointsId = 4 then isnull(R.RedeemAmount,0) else 1 end)
from
   CustomerTable C
   join LoyaltyDetailsTable D on D.CustomerId = C.CustomerId
   join LoyaltyPointTable P on P.LoyaltyPointsId = D.LoyaltyPointsId
   outer apply (
       select sum(Amount) as RedeemAmount, count(Amount) as RedeemCount 
       from RedeemPointsTable R
       where R.CustomerId = C.CustomerId
   ) R
   group by C.CustomerId, C.Name
),

PP (CustomerId, Pricepoints) as (
    select C.CustomerId, sum(P.Pricepoints)
    from PriceTable P
    join PriceClaimTable C on P.PriceClaimId = C.PriceClaimId
    group by C.CustomerId
)

select 
    LP.CustomerId, LP.Name, LP.UserActions, LP.TotalPoints - isnull(PP.Pricepoints, 0) as Points
from
    LP
    left outer join PP on LP.CustomerId = PP.CustomerId 
order by LP.CustomerId

Asumsinya adalah bahwa pelanggan selalu ditemukan dari tabel loyalitas, tetapi tidak perlu dari tabel penukaran atau harga

SQL Fiddle untuk versi ini:http://sqlfiddle.com/#!3/5e379/8




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Menambahkan INDEX ke CTE

  2. Bidang XML - Kueri

  3. Solusi lain untuk SQL's Media set memiliki 2 keluarga media tetapi hanya 1 yang disediakan. Semua anggota harus disediakan. kesalahan?

  4. Pisahkan hasil baris ke kolom

  5. Perbedaan aneh SQL Server 2005 Collation antara varchar () dan nvarchar ()