2011-06-30 94 views
1

我要帶一套交易和金額的,我想創建一個新的量柱,用下面的邏輯 -SQL查詢重新計算運行總計

  1. 檢查的運行總計(新)金額迄今。
  2. 如果將此金額添加到先前的總金額會使總金額小於零,則新金額字段應爲零。否則,它應該等於舊的金額。

這裏是我要找的一個例子 -

Item Record Old amount New Amount Running Total 
1  1   100   100   100 
1  2  -100  -100    0 
1  3  -200   0    0 
1  4   500   500   500 
1  5  -300  -300   200 
1  6   300   300   500 

我在零運行總開始。

我的第一個量爲100,並且不採取總< 0,所以通過它傳遞,並設置新 量至100

我的第二個量爲-100,而沒有按」我的跑步總數爲100到< 0,所以我將新數量設置爲-100。

我的第三筆金額是-200。這將需要運行總計0到-200,< 0.因此,我將新金額設置爲0.

我的第四個金額是500.它通過了。

我的第五筆金額是-300。這將需要500到200的運行總數,仍然> = 0。它會通過。

我的第六量爲300它得到通過,留下我一個最終金額共計500

困難的部分是在像記錄五頭的情況。爲了知道它不會將最終的總計總數低於零,您需要已經計算了記錄3的新總數。

我認爲您可以通過設置公用表表達式來實現此目的一個遞歸查詢,但我已經弄清楚如何創建它。如果可能的話,我想避免遊標。

+0

沒有看到你如何做計算,很難確定。爲什麼不能使用MAX((runningtotal - amount),0)'? – user2338816

回答

0

這是一個WINDOW FUNCTION解決方案與包裝CASE聲明。

查找LAG

+0

DB2已經實現了LAG?我想要它,我想要它! *流口水* – MatBailie

+0

我真的很感謝你的迴應,而且這看起來像是正確的方向,但是我可以詳細瞭解如何構建它?我仍在努力確定如何在涉及的計算中遞歸使用聚合函數。 – Netbrian