代码之家  ›  专栏  ›  技术社区  ›  PeterH

计算2008年之前未使用无界行的运行总计

  •  0
  • PeterH  · 技术社区  · 7 年前

    我有以下查询,可以计算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
    

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

    我有没有别的选择?

    这就是我尝试的自连接:

    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
    
    1 回复  |  直到 7 年前
        1
  •  1
  •   Gordon Linoff    7 年前

    我倾向于使用 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