目前,下面的代码以 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
谢谢。
最佳答案
关键是,当您的数字超过 100 时,您只想对 50 取模。这将使您得到 50 以上的“余数”,您可以将其加 50 以获得所需的输出
WITH RunningTotal AS (
SELECT Id, ListItem, SUM(ListItem) OVER (ORDER BY Id) AS RT FROM @Table)
SELECT Id, ListItem, RT, CASE WHEN RT > 100 THEN RT % 50 + 50 ELSE RT END AS NewRT
FROM RunningTotal
关于sql - 模数后以最小余额运行总计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30187607/