2016-04-21 4 views
0

Ich habe Tow-Feld zum Beispiel Kredit eine Lastschrift in einer Tabelle. und ich brauche, um sie zu fassen und bei jeder Zeile zum Beispiel Ergebnis:Wie summiere ich das Tow-Feld, um das Inline-Ergebnis zu erhalten?

date   debit credit amount 
2015/01/01  20  0  20 
2015/01/02  0  5  15 
2015/01/03  0  30  -15 

ich hoffe, dass Sie mir helfen dank die Menge von einer Abfrage zu erhalten

+2

Dies sollte Ihre Frage beantworten: Ionen Sie eine korrelierte Unterabfrage verwenden http://stackoverflow.com/questions/ 2120544/how-to-get-kumulative-sum – fafl

+0

Haben Sie versucht, Code zu schreiben? – purplepsycho

+0

Was dbms? (MySQL, SQL Server, etc.) – SQLChao

Antwort

0

Mit SQL-Server 2012 oder höher möglich verwenden diese:

SELECT [date], debit, credit, amount, 
    SUM(debit-credit) OVER(ORDER BY [date] ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS amount 
FROM TableName 
ORDER BY [date] 

lesen: OVER-clause, vor allem die ROWS | RANGE Teil

Mit anderen vers

SELECT [date], debit, credit, amount, 
    (SELECT SUM(debit-credit) 
    FROM TableName t2 
    WHERE [date] <= t1.[date]) AS amount 
FROM TableName t1 
ORDER BY [date] 
+0

dieser Code hilft mir sehr gut.aber ich habe ein anderes Problem, wie kann ich Datum filtern und erhalten wahres Ergebnis zum Beispiel ich filter Datum von 2015/01/02 und ich will das Ergebnis -15 bekommen In meiner Menge könntest du mir dabei helfen? –

0

ich mit Tim Antwort einverstanden, ich habe noch einige zusätzliche Zeilen:

declare @credit as table (
    [date] datetime, 
    amount int 
) 

declare @debit as table (
    [date] datetime, 
    amount int 
) 

insert into @debit values 
    ('2015-01-01', 20) 

insert into @credit values 
    ('2015-01-02', 5), 
    ('2015-01-03', 30) 


select 
    [date], debit, credit, SUM(debit-credit) OVER(ORDER BY [date] ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS amount 
from(
    select 
     [date], sum(debit) debit, sum(credit) credit 
    from 
    (
    select 
     [date], 0 credit, d.amount debit 
    from 
     @debit d 
    union all 
    select 
     [date], c.amount credit, 0 debit 
    from 
     @credit c 
    ) j group by j.date 
) x 
Verwandte Themen