2016-07-21 8 views
0

Ich versuche, den Wert der vorhergehenden Zeile in der aktuellen Zeile in die Spalte kumulativenSQL andernfalls Wert hinzufügen aus vorheriger Reihe in die nächsten

Select 
    Ddate as Date, etype, Reference, linkacc as ContraAcc, 
    Description, 
    sum(case when amount > 0 then amount else 0 end) as Debits, 
    sum(case when amount < 0 then amount else 0 end) as Credits, 
    sum(amount) as Cumulative 
from 
    dbo.vw_LT 
where 
    accnumber ='8400000' 
    and [DDate] between '2016-04-01 00:00:00' and '2016-04-30 00:00:00' 
    and [DataSource] = 'PAS11CEDCRE17' 
group by 
    Ddate, etype, Reference, linkacc, Description, Amount 

Output hinzuzufügen (was ich bin immer):

Date  Reference ContraAcc Description Debits Credits Cumulative 
-------------------------------------------------------------------------- 
2016-04-01  CC007 8000000  D/CC007  0  -39.19 -39.19 
2016-04-01  CC007 8000000  D/CC007  1117.09  0  1117.09 
2016-04-01  CC009 8000000  CC009  2600  0  2600 

in der kumulativen Spalte sollte unten mögen (was ich brauche):

Date  Reference ContraAcc Description Debits Credits Cumulative 
-------------------------------------------------------------------------- 
2016-04-01  CC007 8000000  D/CC007  0  -39.19 -39.19 
2016-04-01  CC007 8000000  D/CC007  1117.09  0  1077.9 
2016-04-01  CC009 8000000  CC009  2600  0  3677.9 
+0

Sie sollen posten Sie einige gesampelte Daten und ein erwartetes Ergebnis, da Ihre Frage nicht klar ist. Markieren Sie auch Ihre rdbms (Oracle, MySQL, SQL-Server) als Antworten werden sich stark unterscheiden. Ihre Anfrage oben hat keinen Mechanismus, der andere Zeilen kennen würde, so dass sie keine laufenden oder kumulativen Summen wären – Matt

+0

Ich habe die Beispieldaten hinzugefügt – Tinashe

+0

Ich verstehe nicht, was "in der kumulativen Spalte Zeile zwei muss -39.19 + 1117.09 und sein so weiter "bedeutet - kannst du das umschreiben, um klarer zu sein, bitte? Ist die Ausgabe, die Sie gepostet haben, was Sie gerade bekommen oder was Sie wollen? – Blorgbeard

Antwort

1

Bevor wir in die Lösung eintauchen, lassen Sie mich Ihnen sagen, dass, wenn Sie SQL Server-Version mehr als 2012 verwenden, gibt es LAG und LEAD, die Ihnen helfen können, dies zu lösen.

ich nicht, dass Ihnen eine genaue Abfrage geben würde Ihr Problem zu lösen (wie wir nicht wissen, was Ihr Primärschlüssel für diese Tabelle ist), aber man kann auf die Idee kommen, indem Sie das folgende Beispiel sieht

DECLARE @t TABLE 
(
    accountNumber VARCHAR(50) 
    ,dt    DATETIME 
    ,TransactedAmt BIGINT 
) 

INSERT INTO @t VALUES ('0001','7/20/2016',1000) 
INSERT INTO @t VALUES ('0001','7/21/2016',-1000) 
INSERT INTO @t VALUES ('0001','7/22/2016',2000) 

INSERT INTO @t VALUES ('0002','7/20/2016',500) 
INSERT INTO @t VALUES ('0002','7/21/2016',-500) 
INSERT INTO @t VALUES ('0002','7/22/2016',2000) 

;WITH CTE AS 
(
    SELECT ROW_NUMBER() OVER(Partition by accountNumber order by dt) as RN, * 
    FROM @t 
),CTE1 AS 
(
    SELECT *,TransactedAmt As TotalBalance 
    FROM CTE WHERE rn = 1 
    UNION 
    SELECT T1.*,T1.TransactedAmt + T0.TransactedAmt as TotalBalance 
    FROM CTE T1 
    JOIN CTE T0 
    ON T1.accountNumber = T0.accountNumber 
    AND T1.RN = T0.RN+1 
    AND T1.RN > 1 
) 
select * from CTE1 order by AccountNumber 
+0

eingegeben Sorry, ich habe das obige versucht und gescheitert, bitte unterstützen – Tinashe

+0

Mit den geben Daten kann ich nicht verstehen, wenn Sie die Zeilen indefinetly hinzufügen möchten, dh möchten Sie alle Zeilen unabhängig von Datum hinzufügen, Referenz, Gegenkonto und alle .. oder die kumulative Summe sollte aufhören, sobald eine dieser Änderungen – Surendra

+0

ja danke für schnelle Antwort, sollte es die Zeilen indefinetly hinzufügen, unabhängig von Datum, Referenz, Gegenkonto und alle. – Tinashe

Verwandte Themen