如果在表格中输入新条目,我试图通过减法找到TotalPoints Sum
TotalPoints查询:
SELECT SUM(t.TotalUserActions) as Actions, sum(t.AllTotalPoints) as TotalPoints,
(select Name from CustomerTable where CustomerId=1) as Name from
(
SELECT CASE
WHEN LoayaltyPointsTable.LoyaltyPointsId=4 THEN (SELECT COUNT(amount)
FROM RedeemPointsTable where CustomerId=1)
ELSE COUNT(CustomerTable.CustomerId)
END as TotalUserActions , CustomerTable.Name,
CASE
WHEN LoayaltyPointsTable.LoyaltyPointsId=4 THEN (SELECT SUM(amount)
FROM RedeemPointsTable where CustomerId=1)*Points
ELSE SUM(LoayaltyPointsTable.Points)
END as AllTotalPoints
FROM
LoayaltyPointsTable
INNER JOIN
LoyaltyDetailsTable
on LoayaltyPointsTable.LoyaltyPointsId = LoyaltyDetailsTable.LoyaltyPointsId
INNER JOIN
CustomerTable
on CustomerTable.CustomerId = LoyaltyDetailsTable.CustomerId
where CustomerTable.CustomerID =1
group by CustomerTable.Name,LoayaltyPointsTable.LoyaltyPointsId,
LoayaltyPointsTable.Points,CustomerTable.CustomerId
) t
总点数查询输出:
Actions Totalpoints Name
30 500 John
PriceTable
Priceid Title Discriptions Pricepoints
1 abc abc 400
2 def def 500
PriceClaimTable
PriceClaimId CustomerId PriceId
1 1 22
2 2 23
使用上表,我试图根据PriceClaimTable中的CustomerId和PriceId减去TotalPoints - Pricepoints 如果PriceClaimTable中没有基于Customerid的新条目,那么只显示没有减法的总分
到目前为止,我试图找到价格点
select PriceTable.PricePoints from PriceTable
inner join PriceClaimTable
on PriceTable.PriceId = PriceClaimTable.PriceId
inner join CustomerTable
on CustomerTable.CustomerId = PriceClaimTable.CustomerId
where CustomerTable.CustomerId =1
group by PriceTable.PricePoints
这使我的输出为:
PricePoints
400
预期输出:
TotalPoints:
100 // (500-400)
如何在一个查询中减去结果并根据customerid查找总点数?
其他表格结构:
http://sqlfiddle.com/#!2/67436/5
任何帮助都会很棒。
答案 0 :(得分:0)
基于SQL Fiddle,我做了一个新的尝试,我认为这是正确的,虽然它为John返回81而不是100:
; 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
假设客户总是从忠诚度表中找到,但不需要从兑换或价格表中找到
此版本的SQL小提琴:http://sqlfiddle.com/#!3/5e379/8