目前,以下代码以50为限制运行总计。
现在我想将50作为剩余的最小值。我怎么可能这样做。任何提示都会非常有用。 (最低余额50)。此代码在sql 2012中,需要它才能在sql2008及以上版本中运行
示例:
- 10 10
- 20 30
- 30 60
- 40 100 --> 50 (min value of 50) 100-50 = 50
- 2 52
- 3 55
- 10 65
- 25 90
- 15 105 --> 55 (min value 50, 105-50 = 55)
- 5 60
DECLARE @Table TABLE (Id INT, ListItem INT);
INSERT INTO @Table VALUES (1, 10);
INSERT INTO @Table VALUES (2, 20);
INSERT INTO @Table VALUES (3, 30);
INSERT INTO @Table VALUES (4, 40);
INSERT INTO @Table VALUES (5, 2);
INSERT INTO @Table VALUES (6, 3);
INSERT INTO @Table VALUES (7, 10);
INSERT INTO @Table VALUES (8, 25);
INSERT INTO @Table VALUES (9, 15);
INSERT INTO @Table VALUES (10, 5);
WITH RunningTotal AS (
SELECT Id, ListItem, SUM(ListItem) OVER (ORDER BY Id) % 50 AS RT FROM @Table)
SELECT
rt.Id,
rt.ListItem,
CASE WHEN rt.RT < rt2.RT THEN rt.RT + 50 ELSE rt.RT END AS RunningTotal
FROM
RunningTotal rt
LEFT JOIN RunningTotal rt2 ON rt2.Id = rt.Id - 1
ORDER BY
rt.Id;
编辑:
现在我明白了。但是,当我尝试更改值时,它只能工作一次。比如说一旦累计值超过350000,扣除300000,意味着最低余额为50000.
任何提示?
链接:http://sqlfiddle.com/#!6/c9051/1/0
谢谢。
答案 0 :(得分:1)
关键是,当你的数字大于100时,你只想以模数50去。这样就可以得到剩下的&#34; 50以上,你加50来获得你想要的输出
ModelState.Clear