如何在 SQL 视图中进行累积减法?

How Do I do A Cummulative Subtraction in SQL Views?

我有一个包含两个字段的 SQL 视图。我想按周计算减少余额。

TableID  item_no    Qty_shp     Qty_Stk  Balance    posting_date    
1        WTR234       28         500       472       2015/03/09
2        WTR234       42         472       430       2015/03/15
3        WTR234       100        500       400       2015/03/16
4        WTR234       50         400       350       2015/03/22

如上面的 table 所示,我需要能够每周计算这些项目的余额,因为 Qty_Stk 在新的开始时恢复为新值一周是星期一。


来自 OP 的评论

TableID item_no Qty_shp Qty_O   Qty_Stk Balance posting_date    
1       WTR234  28      500     500     472     2015/03/09  
2       WTR234  42      500     472     430     2015/03/15  
3       WTR234  100     500     500     400     2015/03/16  
4       WTR234  50      500     400     350     2015/03/22

这可以使用带有 over () 子句的聚合函数 sum() 来解决。在查询中,我只根据周对数据进行分区,但如果有多个产品,您可能也想将 item_no 作为分区的一部分。

我认为这个查询应该给你正确的结果(它使用你有限的样本数据为我提供了正确的结果)。

编辑:我在尝试时使用了设置 SET DATEFIRST 1

select 
    TableID,
    item_no,
    Qty_shp,
Qty_Stk = qty_o - isnull(
   sum(qty_shp) over (
      partition by datepart(week, posting_date) 
      order by posting_date 
      rows between unbounded preceding and 1 preceding
      )
   ,0),
    Balance = qty_o - sum(qty_shp) over (
       partition by datepart(week, posting_date) 
       order by posting_date
    ),
    posting_date    
from your_table

这给了我以下输出:

TableID     item_no    Qty_shp     Qty_Stk     Balance     posting_date
----------- ---------- ----------- ----------- ----------- ------------
1           WTR234     28          500         472         2015-03-09
2           WTR234     42          472         430         2015-03-15
3           WTR234     100         500         400         2015-03-16
4           WTR234     50          400         350         2015-03-22