Maison >base de données >tutoriel mysql >Comment réinitialiser une somme cumulée dans Oracle en fonction d'une condition ?

Comment réinitialiser une somme cumulée dans Oracle en fonction d'une condition ?

Patricia Arquette
Patricia Arquetteoriginal
2024-11-02 20:30:03562parcourir

How to Reset a Cumulative Sum in Oracle Based on a Condition?

Somme conditionnelle dans Oracle

Dans Oracle, la sommation conditionnelle fait référence à l'exécution d'une opération de somme cumulative tout en réinitialisant la valeur accumulée en fonction d'une condition spécifiée . Cette technique vous permet de manipuler les données de manière à ce que la somme soit réinitialisée à une valeur spécifique lorsqu'un certain seuil est atteint.

Pour y parvenir, vous pouvez exploiter la clause SQL MODEL. Cette clause vous permet de définir un modèle de données hiérarchique et de spécifier des calculs basés sur ce modèle.

Considérez l'exemple suivant dans lequel vous souhaitez calculer une somme cumulée qui se réinitialise à chaque fois qu'elle dépasse 15 :

with test_data (sort_col, addend) as
(
  SELECT 'A', 3 FROM DUAL UNION ALL
  SELECT 'B', 7 FROM DUAL UNION ALL
  SELECT 'C', 6 FROM DUAL UNION ALL
  SELECT 'D', 5 FROM DUAL UNION ALL
  SELECT 'E', 9 FROM DUAL UNION ALL
  SELECT 'F', 3 FROM DUAL UNION ALL
  SELECT 'G', 8 FROM DUAL
),
sorted_inputs (sort_col, sort_order, addend, running_sum_max_15) as
(
  SELECT sort_col, row_number() over (order by sort_col) sort_order, addend, 0 from test_data
)
SELECT sort_col, addend, running_sum_max_15
from sorted_inputs
model 
dimension by (sort_order)
measures (sort_col, addend, running_sum_max_15)
rules update
(
  running_sum_max_15[1] = addend[1],
  running_sum_max_15[sort_order>1] = 
    case 
      when running_sum_max_15[CV(sort_order)-1] < 15 
      THEN running_sum_max_15[CV(sort_order)-1] 
      ELSE 0 END + addend[CV(sort_order)]
)

Résultats :

SORT_COL ADDEND RUNNING_SUM_MAX_15
A 3 3
B 7 10
C 6 16
D 5 5
E 9 14
F 3 17
G 8 8

Comme vous pouvez le constater, la somme cumulée se réinitialise à 0 après avoir dépassé 15 pour les lignes « C » et « F ». Cela vous permet d'effectuer une sommation conditionnelle basée sur des critères spécifiques définis dans votre requête.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn