我有一个包含两个字段的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
如上表所示,我需要能够按周计算这些项目的余额,因为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
答案 0 :(得分:1)
这可以使用带有sum()
子句的聚合函数over ()
来解决。在查询中,我只根据周分区数据,但如果有多个产品,也许你想要将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