Bedingtes SUMMEN in Oracle: Zurücksetzen von Werten, wenn der Grenzwert 15 überschreitet
In Oracle kann es vorkommen, dass Sie Werte bedingt summieren müssen und die Summe zurücksetzen, wenn sie einen bestimmten Schwellenwert erreicht. Angenommen, Sie haben Daten wie folgt in einer Tabelle dargestellt:
A | 3 | 3 B | 7 | 10 C | 6 | 16 -- ==== D | 5 | 5 E | 9 | 14 F | 3 | 17 -- ==== G | 8 | 8
Ziel: Schreiben Sie eine Abfrage, die die laufende Summe der Werte berechnet und sie auf Null zurücksetzt, wenn die Summe 15 überschreitet.
Lösung mit der SQL MODEL-Klausel
Eine Alternative zu rekursivem SQL für dieses Problem ist die Verwendung der SQL MODEL-Klausel. Die Syntax mag komplexer erscheinen, kann aber in manchen Fällen Klarheit schaffen:
-- Create a temporary table for demonstration purposes 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 ), -- Implementation of the conditional summation using MODEL clause 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)] )
Ergebnisse:
+----------+--------+--------------------+ | 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 | +----------+--------+--------------------+
Diese Abfrage führt effektiv die bedingte Summierung durch, Zurücksetzen der laufenden Summe auf Null, wenn sie den Schwellenwert von 15 überschreitet.
Das obige ist der detaillierte Inhalt vonWie führt man in Oracle eine bedingte Summierung mit einem zurückgesetzten Schwellenwert durch?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!