基于2列名称运行总和

时间:2017-05-01 20:37:48

标签: sql sql-server running-total

我正在使用SQL Server 2014,我需要获得运行总和计算。我有下表:

Date    State   Product    Total Sold or Returns    Transaction
22-Apr  FL       shoes            72                    Sale
22-Apr  FL      sandals            3                    Sale
22-Apr  TX       shoes             12                   Sale
22-Apr  TX       sandals           5                    Sale
23-Apr  FL      shoes              1                    Sale
23-Apr  FL      sandals            48                   Sale
23-Apr  TX      shoes               5                   Sale
23-Apr  TX      sandals            23                   Sale
22-Apr  FL      shoes              -65                  Returns
22-Apr  FL     sandals              -4                 Returns
22-Apr  TX      shoes              -25                 Returns
22-Apr  TX     sandals             -8                  Returns
23-Apr  FL     shoes              -2                   Returns
23-Apr  FL     sandals            -51                  Returns
23-Apr  TX     shoes               -5                   Returns
23-Apr  TX     sandals             -3                   Returns

我正在尝试计算每个州每个产品的运行总月份。例如,对于FL,鞋子将是(72 +( - 65))= 7为4/22然后7 +(1 +( - 2))= 6。凉鞋也是如此,也适用于TX。

实现这一目标的最佳方法是什么?

2 个答案:

答案 0 :(得分:2)

使用累积和窗函数执行此操作:

select t.*,
       sum(total_sold_or_returns) over (partition by state, product, year(date), month(date)
                                        order by date) as cumulative_sum
from t;

partition by正在使用stateproduct - 以及月份。

答案 1 :(得分:0)

还没有足够的回复评论,但有一点需要指出的是,要使用窗口函数获取运行总计,请在PARTITION中使用ORDER BY。这仅适用于2012 +。我知道你说你使用的是2014年,但如果你不知道ORDER BY在PARTITION中如何运作,你就不会真正理解之前的答案。