问题描述
我想帮助自己,我有一个有 4 列的表格(Id、Grp、Amount、SumMonto)。 金额列是货币类型并处理 4 位小数。所以存储了 0.0001 的值。 我想添加 Cumulative Amount 列,每次它的值等于或大于 0.01(四舍五入的值)时,它都会记录在 对应累计总和,小于0.01的必须记零
这是我的示例代码 (sql v17.9)
if object_id('tempdb..#example') is not null
drop table #example
CREATE TABLE #example (
Id INTEGER identity(1,1),Grp INTEGER NULL,DateT VARCHar(8),Amount money NULL
);
INSERT INTO #example VALUES (1,'20210101',0.0037);
INSERT INTO #example VALUES (1,'20210102','20210103','20210104','20210105','20210106','20210107','20210108',0.0012);
INSERT INTO #example VALUES (1,'20210109',0.0012);
INSERT INTO #example VALUES (2,0.0100);
INSERT INTO #example VALUES (2,0.0018);
INSERT INTO #example VALUES (2,0.0548);
我已经用 sum (Amount) 进行了累加,但它只累加了值,当它大于或等于 0.01 时我不知道如何重置累加并且那 它在不累积便士的行中注册零
这是我的代码和输出(我使用过案例说明,但我不能,所以我复制了基本指令)
select Id,Grp,DateT,Amount,sum(Amount) OVER
(
PARTITION BY Grp
ORDER BY DateT --ROWS UNBOUNDED PRECEDING
) Accumulated
from #example
Id Grp DateT Amount Accumulated
----------- ----------- --------------------- ------------------- ---------------------
1 1 20210101 0.0037 0.0037
2 1 20210102 0.0037 0.0074
3 1 20210103 0.0037 0.0111
4 1 20210104 0.0037 0.0148
5 1 20210105 0.0037 0.0185
6 1 20210106 0.0037 0.0222
7 1 20210107 0.0037 0.0259
8 1 20210108 0.0012 0.0126
9 1 20210109 0.0012 0.0138
10 2 20210101 0.0012 0.0012
11 2 20210102 0.0012 0.0024
12 2 20210103 0.0012 0.0036
13 2 20210104 0.0012 0.0048
14 2 20210105 0.0012 0.0060
15 2 20210106 0.0100 0.0160
16 2 20210107 0.0018 0.0178
17 2 20210108 0.0018 0.0196
18 2 20210109 0.0548 0.0744
在下表中,我表示当累加到 0.01 时值应该如何出来,而不是 0.01 时将值重置为零。
Id Grp DateT Amount Accumulated
----------- ----------- --------------------- --------------------- ---------------------
1 1 20210101 0.0037 0.0000
2 1 20210102 0.0037 0.0000
3 1 20210103 0.0037 0.0100
4 1 20210104 0.0037 0.0000
5 1 20210105 0.0037 0.0000
6 1 20210106 0.0037 0.0100
7 1 20210107 0.0037 0.0000
8 1 20210108 0.0012 0.0000
9 1 20210109 0.0012 0.0000
10 2 20210101 0.0012 0.0000
11 2 20210102 0.0012 0.0000
12 2 20210103 0.0012 0.0000
13 2 20210104 0.0012 0.0000
14 2 20210105 0.0012 0.0100
15 2 20210106 0.0100 0.0100
16 2 20210107 0.0018 0.0000
17 2 20210108 0.0018 0.0000
18 2 20210109 0.0548 0.0600
为了找到最佳选项,此例程将应用于平均 700 万条记录或更多记录。 非常感谢您的任何建议
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)