sql >> Database teknologi >  >> RDS >> Sqlserver

SQL Total Sum med subtraktion, hvis der foretages ny indtastning i tabellen

Baseret på SQL Fiddle lavede jeg et nyt forsøg, som jeg mener er korrekt, selvom det returnerer 81 og ikke 100 for 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

Antagelsen er, at kunden altid findes fra loyalitetstabellerne, men ikke nødvendigt fra indløsnings- eller pristabeller

SQL Fiddle for denne version:http://sqlfiddle.com/#!3/5e379/8




  1. visning af datafelter som afkrydsningsfelter, bibehold afkrydset værdi og sæt værdi som 1, når det er markeret

  2. SQL-sortering følger ikke gruppe for sætning, bruger altid primærnøgle

  3. PL/Perl send mail i Postgresql

  4. Kodningsproblem i AJAX