如何在Oracle中SQL

如何在Oracle中SQL

问题描述:

降低运行总我有一栏下面值如何在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中实现这一点,但我想在选择查询中实现这一点。有人可以帮我吗?

你可以用累计总和做到这一点:

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