我有以下情况,即用户每个月都会获得一些补贴,直至每年一次。
我已成功实现此功能,如here
所示我遇到了一个问题,如果用户在这一年内获得晋升,则需要相应地批准年度上限。
以下查询给出了这些结果。 (使用sql server 2012)
SELECT *,
RemainingBalance = AnnualCapping - Sum(amount)
OVER (
partition BY userid, year, annualcapping
ORDER BY userid, year, month)
FROM exampleTx
WHERE userid = 1
AND year = 2015
数据
userId year month monthname name surname annualCapping amount RemainingBalance
1 2015 1 January Joe Black 500,00 40,00 460,00
1 2015 2 February Joe Black 500,00 40,00 420,00
1 2015 3 March Joe Black 500,00 40,00 380,00
1 2015 4 April Joe Black 500,00 40,00 340,00
1 2015 5 May Joe Black 500,00 40,00 300,00
1 2015 6 June Joe Black 500,00 40,00 260,00
1 2015 7 July Joe Black 500,00 40,00 220,00
1 2015 8 August Joe Black 500,00 40,00 180,00
1 2015 9 September Joe Black 1000,00 40,00 **960,00**
1 2015 10 October Joe Black 1000,00 40,00 **920,00**
1 2015 11 November Joe Black 1000,00 40,00 **880,00**
1 2015 12 December Joe Black 1000,00 40,00 **840,00**
9月份每月津贴应与年度剩余量成比例。
4 months = 1000 * 4/12 = 333.33
余下293.33, 253.33, 213.33,173.33
。
我可以在不修改年度上限字段的情况下实现这一目标。如果年度上限减少到333.33
,那将会更简单,但这是我的数据。
上个月的上限变化表明促销已经发生。它可以在任何一个月发生。因此新的封顶应该是成比例的。
答案 0 :(得分:0)
您可以使用以下查询
Select *,
RemainingBalance = AnnualCapping - SUM(amount) OVER (
partition by userid ,year ORDER BY userid, year,month)
from
exampleTx
where userid = 1 and year = 2015
从Partition by子句中删除年度上限。