2016-04-27 8 views
1

Ich verwende SQL 2008 R2. Ich habe eine kleine Tabelle mit den folgenden Spalten:SQL-Hilfe Berechnen von Öffnen und Schließen von Kontospalten

Datum Location1 Location2 Location3

Und wenn man diese 2 Spalten

Eröffnungsbilanz = beginnt bei 0 zu berechnen, danach Endbestand von i.Vj. gleich Tag Endbestand = Eröffnungsbilanz + location1 + location2 + Location3

Also suche ich im Grunde diese in einen Bericht auszuspucken:

DATE | OPENING_BALANCE | LOC1 | LOC2 | LOC3 | CLOSING_BALANCE 
---------------------------------------------------------------------------- 
1/1  $0.00    $1,000 $1,000  $1,000  $3,000 
1/2  $3,000    $2,000 $2,000  $1,000  $8,000 
1/3  $8,000   ($1,000) ($4,000)  $500   $3,500 
1/4  $3,500   $10,000 ($5,000)  $20,000  $28,500 
1/5  $28,500 

Gibt es eine einfache Möglichkeit, diese 2 Spalten zu berechnen? Hilfe geschätzt! Vielen Dank im Voraus

** Entschuldigung für das schlampig Tabelle Beispiel

+0

Was Datentypen sind Datum, Standort1, Standort2. Standort3? –

+0

gibt es eine Möglichkeit, auf SQL Server 2012+ zu aktualisieren? –

+0

Datum ist nur ein Datetime, es liest sich wirklich wie 1/1/2016 zum Beispiel. Die Orte sind nur schweben. Leider kann ich nicht auf 2012+ upgraden :(Danke – Jay

Antwort

3

Ok, von den von Ihnen bereitgestellten Informationen (nur Ausgang und kein Tabellenschema), diese Abfrage könnte für Sie arbeiten:

WITH cte AS 
(
SELECT 
    [Date], 
    Loc1 = Location1, 
    Loc2 = Location2, 
    Loc3 = Location3, 
    DayTotal = Location1 + Location2 + Location3, 
    ROWNUM = ROW_NUMBER() OVER (ORDER BY [Date]) 
FROM 
    tbl 
) 
SELECT 
    DATE = c1.[Date], 
    OPENING_BALANCE = ISNULL(c2.OpeningDayTotals, 0), 
    LOC1 = c1.Loc1, 
    Loc2 = c1.Loc2, 
    Loc3 = c1.Loc3, 
    CLOSING_BALANCE = ISNULL(c2.OpeningDayTotals, 0) + c1.DayTotal 
FROM 
    cte c1 
OUTER APPLY 
(
    SELECT 
     OpeningDayTotals = SUM(c2.DayTotal) 
    FROM 
     cte c2 
    WHERE 
     c1.ROWNUM > c2.ROWNUM 
) AS c2 
+0

Das sieht so aus, als hätte es perfekt funktioniert! Danke – Jay

Verwandte Themen