每次四舍五入大于或等于 0.01 时重置总和十进制值,过度分区为

问题描述

我想帮助自己,我有一个有 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 (将#修改为@)