2017-04-04 2 views
0
id  value 
1   10 
2   20 
3   30 
4   40 
5   50 

Erforderlich Ausgabewie Spaltenwert in der nächsten colum

Tabellenname Daten hinzuzufügen.

id  value 
1   10 //(10+0(previous value)) 
2   30 //(20+10(previous value)) 
3   50 //(30+20(previous value)) 
4   70 //(40+30(previous value)) 
5   90 //(50+40(previous value)) 

bitte geben Sie SQL-Abfrage

+0

Welche Sie verwenden RDBMS? mysql oder SQL Server? –

+3

Ich entfernte die inkompatiblen Datenbank-Tags. Bitte markieren Sie nur die Datenbank, die Sie wirklich verwenden. –

+0

Datenbankname-ibm DB2 – raj

Antwort

1

Sie suchen LAG suchen, die Standard-SQL und sollte in späteren DB2-Versionen verfügbar sein, wenn ich nicht irre.

select 
    id, 
    value + coalesce(lag(value) over (order by id), 0) as value 
from mytable 
order by id; 

Bei LAG OVER nicht verfügbar ist, sein SUM OVER kann:

select 
    id, 
    coalesce(sum(value) over (order by id rows between 1 preceding and current row), 0) 
    as value 
from mytable 
order by id; 
+0

Wenn Abfrage ausführen als dieser Fehler kommt wählen id, coalesce (sum (Wert) über (um nach ID Reihen zwischen 1 vorausgehenden und aktueller Zeile), 0) als Wert von users.mohit Reihenfolge von ID "VALUE" ist im Kontext nicht gültig wo es verwendet wird .. SQLCODE = -206, SQLSTATE = 42703, DRIVER = 4.18.60 – raj

+0

Sorry, ich sehe nicht, wie es zu dieser Nachricht kommen kann. "Wert" wird nur an zwei Stellen verwendet: "Summe (Wert)", die korrekt erscheint und "als Wert", die auch korrekt erscheint. Ich kenne DB2 nicht gut. Hat es ein Problem, weil wir den gleichen Namen für den Alias ​​wie für die Spalte verwenden? Ich weiß es nicht. –

0

Lösung 1:

select f1.id, 
ifnull((select f2.value from yourtable f2 where f1.id - 1 =f2.id), 0) + f1.value as value 
from yourtable f1 
0

Lösung 2:

select f1.id, 
ifnull(f3.value, 0) + f1.value as value 
from yourtable f1 
left outer join lateral 
(
    select f2.value from yourtable f2 
    where f1.id - 1 =f2.id 
) f3 on 1=1 
Verwandte Themen