在模数后以最小平衡运行总计

时间:2015-05-12 10:04:04

标签: sql sql-server-2008

目前,以下代码以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

谢谢。

1 个答案:

答案 0 :(得分:1)

关键是,当你的数字大于100时,你只想以模数50去。这样就可以得到剩下的&#34; 50以上,你加50来获得你想要的输出

ModelState.Clear