2017-09-08 4 views
0

ich die folgenden Abfrage eine laufende Summe in SQL Server 2016berechnet Gesamt läuft ohne in 2008 Zeilen Unbounded Vorstehende mit

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 

Allerdings berechnen kann, habe ich jetzt mit der Verwendung von es auf einem alten Server beauftragt worden, dass verwendet nur Server 2008, und die Funktion war dann nicht verfügbar.

Ich habe versucht, ein Self-Join, um es neu zu erstellen, aber es kann nur für einen einzigen Zweig arbeiten, da ich nicht scheinen kann, die Daten wie oben zu partitionieren.

Gibt es eine Alternative, die ich verwenden könnte?

Das ist, was ich mit dem Selbst versuchte beitreten:

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 

Antwort

1

Ich neige dazu, outer apply oder eine korrelierte Unterabfrage für diesen Zweck zu verwenden. Das entspricht Ihre ursprüngliche Abfrage sollte sein:

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; 

Dies setzt voraus, dass die BranchNo/FiscalYear/FiscalWeek Kombination in der Tabelle eindeutig ist (die wie eine vernünftige Annahme scheint).

+0

perfekt kumpel danke !! Ja, da es sich um eine aggregierte Verkaufstabelle handelt, sind diese Variablen alle einzigartig – PeterH