在 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 中是唯一的(这似乎是一个合理的假设)。
我有以下查询可以在 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 中是唯一的(这似乎是一个合理的假设)。