Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

SUM có điều kiện trên Oracle

Để thay thế cho SQL đệ quy, bạn cũng có thể sử dụng MODEL của SQL mệnh đề. Cá nhân tôi thấy điều này dễ đọc hơn một chút so với SQL đệ quy, mặc dù nó khó viết hơn (bởi vì hầu hết mọi người, giống như tôi, cần phải tra cứu cú pháp).

-- "test_data" is just a substitute for your real table, which I don't have
-- it is just so people without your table can run this example and would
-- not be part of your real solution.
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 ),
-- Solution begins here
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)]
)

KẾT QUẢ

+----------+--------+--------------------+
| 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 |
+----------+--------+--------------------+


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tích hợp ServiceNow với Oracle Identity Cloud Service (IDCS)

  2. Nhận ngoại lệ ORA-00942:bảng hoặc dạng xem không tồn tại - khi chèn vào bảng hiện có

  3. Cách tạo chế độ xem trong oracle

  4. Làm thế nào để loại bỏ các dấu cách sau tên tháng trong Oracle

  5. Chuyển điều khiển đến dòng cụ thể bằng lệnh Goto Label trong PLSQL