在 2008 年不使用 Rows Unbounded Preceding 计算 运行 总数

Calculate running total without using Rows Unbounded Preceding in 2008

我有以下查询可以在 SQL Server 2016

中计算 运行 总数
Select
    BranchNo
    ,FiscalWeek
    ,SalesExVAT
    ,Sum(SalesExVAT) Over (Partition By BranchNo Order By FiscalWeek Rows Unbounded Preceding) As cumulative_sales
From 
    [EUUKSQL01].[DASHBOARD].[dbo].[SalesAggregateWeek]

Where 
    BranchNO in (1,4,7)
    And FiscalYear = 2017

但是,我现在的任务是在仅使用 Server 2008 的旧服务器上使用它,而当时该功能不可用。

我尝试过自连接来重新创建它,但它只能用于单个分支,因为我似乎无法像上面那样对数据进行分区。

有没有我可以使用的替代方案?

这是我尝试使用自连接的方式:

Select  
    sa.BranchNo
    ,sa.FiscalWeek
    ,sa.SalesExVAT
    ,Sum(sb.SalesExVAT) As cumulative_sales

From
    [EUUKSQL01].[DASHBOARD].[dbo].[SalesAggregateWeek] sa

Inner Join
    [EUUKSQL01].[DASHBOARD].[dbo].[SalesAggregateWeek] sb
    On sa.FiscalWeek >= sb.FiscalWeek

Where
    sa.FiscalYear = 2017
    And sa.BranchNo = 1
    And sb.FiscalYear = 2017
    And sb.BranchNo = 1

Group By
    sa.BranchNo
    ,sa.FiscalWeek
    ,sa.SalesExVAT

Order By
    sa.BranchNo
    ,sa.FiscalWeek
    ,sa.SalesExVAT

为此,我倾向于使用 outer apply 或相关子查询。相当于您的原始查询应该是:

select daw.BranchNo, daw.FiscalWeek, daw.SalesExVAT,
       (select Sum(daw2.SalesExVAT)
        from [EUUKSQL01].[DASHBOARD].[dbo].[SalesAggregateWeek] daw2
        where daw2.BranchNo = daw.BranchNo and
              daw2.FiscalYear = daw.FiscalYear and
              daw2.FiscalWeek <= daw.FiscalWeek
       ) As cumulative_sales
from [EUUKSQL01].[DASHBOARD].[dbo].[SalesAggregateWeek] daw
where daw.BranchNO in (1, 4, 7) and daw.FiscalYear = 2017;

这假设 BranchNo/FiscalYear/FiscalWeek 组合在 table 中是唯一的(这似乎是一个合理的假设)。