2017-10-20 18 views
0

J'ai une colonne avec des valeurs inférieures àComment avoir la diminution totale courir dans Oracle sql

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

J'ai besoin le résultat que

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

Comment faire cela dans la requête SQL Oracle. Je sais que je peux y parvenir en PL/SQL, mais je veux y parvenir en sélectionnant une requête. Quelqu'un pourrait-il m'aider s'il vous plaît?

Répondre

0

Vous pouvez le faire avec des sommes cumulatives:

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; 

Je ne pense pas que vous devriez traiterez semaine 0 comme quelque chose de spécial. Au lieu de cela, utilisez des valeurs positives et négatives. Alors vous pouvez faire:

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

Merci @gordon, il a travaillé :) – bharath

+0

Malheureusement, les valeurs ne sont pas positives et négatives .. et somme (valeur) sur la semaine donnera de plus en plus en cours d'exécution totale. – bharath

+0

J'ai ajouté un scénario supplémentaire à la même requête ci-dessus. Une idée sur la solution pour la même chose? – bharath