如何在 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
我有一个包含两个字段的 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