SQL 服务器:根据两个条件重置 运行 总数

SQL SERVER: Reset running total according to two conditions

我需要在满足两个条件时重置 运行 总数。

有关说明,请参阅下面的更新。

使用SQL服务器

Current Table:
item_Number|cartons|average_cartons|running_total|
123456     |.1     |.181818        |.1           |    
123456     |.1     |.181818        |.4           |     
123456     |.1     |.181818        |.5           |   
123456     |.2     |.181818        |.7           |    
123456     |.1     |.181818        |.8           |     
123456     |.1     |.181818        |.9           |    
123456     |.2     |.181818        |1.1          |       
123456     |.3     |.181818        |1.4          |      
123456     |.7     |.181818        |2.0          |     
200000     |3.00   |16.25          |3.0          |
200000     |4.00   |16.25          |7.0          |
200000     |8.00   |16.25          |15.0         |
200000     |1.25   |16.25          |16.25        |
Desired Table: 

item_number|cartons|average_cartons|running_total|resetting_total 
123456     |0.10   |.181818        |0.1           |0.1    
123456     |0.10   |.181818        |0.4           |0.4     
123456     |0.10   |.181818        |0.5           |0.5   
123456     |0.20   |.181818        |0.7           |0.7    
123456     |0.10   |.181818        |0.8           |0.8     
123456     |0.10   |.181818        |0.9           |0.9    
123456     |0.20   |.181818        |1.1           |0.1       
123456     |0.30   |.181818        |1.4           |0.4    
123456     |0.70   |.181818        |2.0           |0.0
200000     |3.00   |16.25          |3.0           |3.0
200000     |4.00   |16.25          |7.0           |7.0
200000     |8.00   |16.25          |15.0          |15.0
200000     |1.25   |16.25          |16.25         |0

更新 1:

数据:

数据按项目编号分区并按一年中的星期排序。因此,

  1. Item_Number = 商品编号。
  2. 纸箱 = 该周每个商品编号售出的纸箱数。
  3. Average_cartons = 每周平均售出纸箱数。
  4. running_total = 运行 周的纸箱总和 商品编号。
  5. resetting_total=一个item_number的运行箱总和 因为 > average_cartons.
  6. 群:不知道有没有必要。其他答案包括 一个组变量,用于对组内的所有值求和。我有 还看到了一个缺货的布尔值来完成这个。见:[OOS回答].1

满足以下两个条件时,resetting_total 列将重置。

条件:

  1. running_total > 1。这说明平均值小于值 1。

  2. 运行总数>=average_cartons。

我的目标:

  1. 粗略估计我什么时候需要订购一套纸箱。

假设:

  1. 至少订购了 1 箱以达到每周平均值 < 1。

  2. 即每个订单将等于average_cartons四舍五入到下一个整数(上限(average_cartons))。

您似乎需要 运行 总数的整数和小数部分。一个简单的方法是:

select floor(running_total) as "group",
       (running_total - floor(running_total)) as resetting_total
from t

您可以使用 % 表示第二部分:

select floor(running_total) as "group",
       (running_total % 1) as resetting_total
from t

不过,我猜大多数人——包括 SQL 服务器爱好者——会认为这是一个错误,或者至少是相当难以理解的代码。 (frac() 函数会更清楚。)

计算分为两部分。先取最大的1和纸箱的平均值作为约数。换句话说,确保它至少为 1。然后使用模运算计算余数。组号类似,只是商的整数部分,而重置是小数部分。

select
    floor(running_total /
        case when average_cartons > 1 then average_cartons else 1.0 end) as grp, /* if you need it */
    running_total %
        case when average_cartons > 1 then average_cartons else 1.0 end as reset_total
from <your query>