2017-02-23 4 views
0

Ich arbeite für 1 Konten Projekt und ich habe in 1 Platz stecken.Müssen den laufenden Kontostand berechnen

Tabelle ist Abbuchungs

ID  Debit  Credit  A  B  C 
1  1000.00  900.00  0  0  1000.00  
2  450.00  425.00  0  450.00 0 
3  500.00  490.00  500.00 0  0 
4  600.00  599.00  600.00 0  0 
5  748.00  700.00  0  748.00 0 


Now if we sum the credit it will be = 3114, 
What I have to do here is whatever total credit I have it has to start from top (A+B+C) - 3114 
So It will make C = 0 and my new credit will be 3114-1000=2114, 
Then in my id=2 it will do the same thing (A+B+C) - 2114 
so now B will be 0 and my new credit will be 2114-450=1664 

Mein Ende Ausgang nach der alle Berechnung sollte es

ID  Debit  Credit  A  B  C 
1  1000.00  900.00  0  0  0.00   
2  450.00  425.00  0  0.00 0 
3  500.00  490.00  0.00 0  0 
4  600.00  599.00  0.00 0  0 
5  748.00  700.00  0  184.00 0 

sein, wenn wir versuchen, (Summe A + Summe B + Summe C) - Kredit, Figur wird Seien Sie gleich, aber es wird in Spalte A kommen, also nach all dem Brainstorming, denke ich, muss obige Berechnung angewendet werden.

Hat jemand eine Idee, wie man das erreicht.

Jede Hilfe wäre willkommen.

+2

verstehe ich nicht Ihre Logik ist hier eine laufende Summe für die Berechnung. –

+0

welche Logik hast du nicht verstanden? –

Antwort

1

SQL Server nur Analytische Funktion SUM() OVER ab Version MSSQL 2012 unterstützen, damit für das Jahr 2008 dies eine Möglichkeit sein kann Ihr Ergebnis abfragen:

WITH table_name AS 
( 
    SELECT 1 ID, 000.00 Debit, 900.00 Credit, 0  a, 0  b, 1000.00  c UNION ALL 
    SELECT 2 ID, 450.00 Debit, 425.00 Credit, 0  a, 450.00 b, 0 c UNION ALL 
    SELECT 3 ID, 500.00 Debit, 490.00 Credit, 500.00 a, 0  b, 0 c UNION ALL 
    SELECT 4 ID, 600.00 Debit, 599.00 Credit, 600.00 a, 0  b, 0 c UNION ALL 
    SELECT 5 ID, 748.00 Debit, 700.00 Credit, 0  a, 748.00 b, 0 c 
) 
, 
sum_credit AS 
(
    SELECT SUM(credit) sumcredit 
    FROM table_name 
) 
SELECT t.id, t.debit, t.credit, 
    CASE WHEN a = 0 
      OR ((SELECT COALESCE(SUM(a + b + c), 0) FROM table_name WHERE id < t.id) 
       + a - sc.sumcredit < 0 
      ) 
     THEN 0 
     ELSE (SELECT COALESCE(SUM(a + b + c), 0) FROM table_name WHERE id < t.id) 
      + a - sc.sumcredit 
     END a, 
    CASE WHEN b = 0 
      OR ((SELECT COALESCE(SUM(a + b + c), 0) FROM table_name WHERE id < t.id) 
       + a + b - sc.sumcredit < 0 
      ) 
     THEN 0 
     ELSE (SELECT COALESCE(SUM(a + b + c), 0) FROM table_name WHERE id < t.id) 
      + a + b - sc.sumcredit 
     END b, 
    CASE WHEN c = 0 
      OR ((SELECT COALESCE(SUM(a + b + c), 0) FROM table_name WHERE id < t.id) 
       + a + b + c - sc.sumcredit < 0 
      ) 
     THEN 0 
     ELSE (SELECT COALESCE(SUM(a + b + c), 0) FROM table_name WHERE id < t.id) 
      + a + b + c - sc.sumcredit 
     END c 
FROM 
    table_name t 
CROSS JOIN 
    sum_credit sc; 
+0

Unglaubliche Mühe @ Pham, Vielen Dank !!!!!!!!!! –

+0

Hallo Pham versuchte ich Ihre Frage in meinem eigentlichen Code, 15 \t 2606,67 \t 0,00 \t 0,00 \t 0,00 1955,00 \t 0,00 \t 0,00 \t 1835,43 45,62 \t 0,00 \t 0,00 \t 1881,05 26,07 \t 0,00 \t 0,00 \t 1907.12 0,00 \t 0,00 \t 2219,92 24196,50 \t 0.00 \t 0.00 \t 26416.42 26416.42 ist die richtige Ausgabe, was ich wollte, aber alle Ausgabe vor, warum es nicht auf 0 –

+0

@RedDevil geht können Sie ein Beispiel geben, dh welche Ausgabe, die nicht auf 0 (zB 14 credit_val x 0 0)? Und da die Abfrage ziemlich klar ist, könnten Sie herausfinden warum (negativer Wert, ID ist nicht kleiner als .....)? –

Verwandte Themen