Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

SQL Total Sum với phép trừ nếu mục nhập mới được tạo trong bảng

Dựa trên SQL Fiddle, tôi đã thực hiện một nỗ lực mới, mà tôi tin là đúng, mặc dù nó trả về 81 chứ không phải 100 cho 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

Giả định rằng khách hàng luôn được tìm thấy từ bảng khách hàng thân thiết, nhưng không cần thiết từ bảng đổi quà hoặc bảng giá

SQL Fiddle cho phiên bản này: 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. Chèn trình kích hoạt SQL từ nhiều bảng

  2. Chuyển đổi ngày có định dạng ISO thành DATETIME

  3. T-SQL 2005:Truyền giá trị Null thông qua kiểu dữ liệu XML

  4. Cách tạo Tập lệnh để Thêm Ràng buộc Mặc định vào Cột trong Nhiều Bảng trong Cơ sở dữ liệu SQL Server - Hướng dẫn SQL Server / TSQL Phần 94

  5. Có thể buộc khóa mức hàng trong SQL Server không?