2017-10-20 66 views
0

降低運行總我有一欄下面值如何在Oracle中SQL

Week Value 
0  83 
1  0 
2  1 
3  4 
4  0 
5  9 

我需要的結果作爲

Week Value Remaining 
    0  83 83 
    1  0  83 
    2  1  82 
    3  4  78 
    4  0  78 
    5  9  69 

如何在Oracle SQL查詢做到這一點。我知道我可以在PL/SQL中實現這一點,但我想在選擇查詢中實現這一點。有人可以幫我嗎?

回答

0

你可以用累計總和做到這一點:

select t.*, 
     (max(case when week = 0 then value end) over() - 
     coalesce(sum(case when week > 0 then value end) over (order by week), 0) 
     ) as remaining 
from t; 

我不認爲你應該治療0周爲一些特別的東西。相反,使用正值和負值。然後,你可以只是做:

select t.*, 
     sum(value) over (order by week) as remaining 
from t; 
+0

感謝@gordon,它的工作:) – bharath

+0

不幸的是,值不正面和負面的..和SUM(值)在本週將得到提高運行總量。 – bharath

+0

我在上面的同一個查詢中增加了一個場景。任何關於解決方案的想法都一樣嗎? – bharath