sqlserver:根据两个条件重置running total

hpxqektj  于 2021-08-09  发布在  Java
关注(0)|答案(2)|浏览(390)

当满足两个条件时,我需要重置运行总数。
请参阅下面的更新以获得澄清。
使用sql server

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:

数据:
数据按项目编号进行分区,并按一年中的星期排序。因此,
item\ u number=项目编号。
纸箱=每周每件商品的纸箱销售量。
average\u cartons=每周平均售出的纸箱数量。
running_total=按项目编号列出的每周纸箱的运行总数。
重置总箱数=从>平均箱数开始,一个项目的箱数的运行总和。
小组:我不确定是否有必要。其他答案包括一个组变量,用于对组中的所有值求和。我还看到一个缺货的布尔值来实现这一点。参见:[oos answer].1
当满足以下两个条件时,重置\u total列将重置。
条件:
总运行时间大于1。这说明平均值小于值1。
运行总数>=平均箱数。
我的目标:
大概估计一下我什么时候需要订一套纸箱。
假设:
至少订购1箱,以说明周平均值<1。
每个订单将等于平均纸箱四舍五入到下一个整数(上限(平均纸箱))。

xoefb8l8

xoefb8l81#

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

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>
mqkwyuun

mqkwyuun2#

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

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 server的狂热爱好者——都会认为这是一个错误,或者至少是一段相当难以理解的代码(一 frac() 功能会更清晰。)

相关问题