Oracle での条件付き合計: 制限が 15 を超えた場合の値のリセット
Oracle では、条件付きで値を合計する必要があるシナリオが発生する場合があります。合計が特定のしきい値に達するとリセットされます。たとえば、次のようにテーブルで表されたデータがあるとします。
A | 3 | 3 B | 7 | 10 C | 6 | 16 -- ==== D | 5 | 5 E | 9 | 14 F | 3 | 17 -- ==== G | 8 | 8
目的: 値の累計を計算し、合計が 15 を超えるとゼロにリセットするクエリを作成します。
SQL MODEL 句を使用した解決策
この問題に対する再帰 SQL の代替案は、SQL MODEL 句を使用することです。構文はより複雑に見えるかもしれませんが、場合によっては明確にすることができます。
-- 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)] )
結果:
+----------+--------+--------------------+ | 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 | +----------+--------+--------------------+
このクエリは条件付き合計を効果的に実行します。累計がしきい値の 15 を超えると、累計がゼロにリセットされます。
以上がOracle でしきい値をリセットして条件付き合計を実行する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。