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

Trợ giúp truy vấn PL SQL đệ quy

Đây là câu trả lời gần đúng, chưa được kiểm tra (nếu bạn đã cung cấp create tableinsert cho dữ liệu / cấu trúc của bạn, tôi đã thử nghiệm nó). Nó giả định rằng không có phân nhánh trong bảng giao dịch của bạn (nghĩa là link_trx_id là duy nhất). Về cơ bản, chúng tôi sử dụng phép nối đệ quy để lấy nhóm, thông tin gốc và thứ tự, sau đó sử dụng các hàm phân tích để nhận tổng số đang chạy (current_net ). Thay vì cố gắng lấy tổng số trước đó (điều mà chúng tôi có thể làm), có vẻ hợp lý hơn nếu chỉ cần xóa credit của hàng hiện tại và debit từ current_net .

SELECT trx_id,
       debit,
       credit,
       root_amt - cum_debit + cum_credit + debit - credit AS current_gross,
       root_amt - cum_debit + cum_credit AS current_net
FROM   (SELECT trx_id,
               debit,
               credit,
               SUM(credit) OVER (PARTITION BY event_id ORDER BY lvl) AS cum_credit,
               SUM(debit) OVER (PARTITION BY event_id ORDER BY lvl) AS cum_debit,
               root_amt
        FROM   (SELECT     trx_id,
                           debit,
                           credit,
                           LEVEL AS lvl,
                           CONNECT_BY_ROOT (gross_amount) AS root_amt,
                           CONNECT_BY_ROOT (event_id) AS event_id
                FROM       transaction t LEFT OUTER JOIN event e ON t.trx_id = e.transaction_id
                CONNECT BY link_trx_id = PRIOR trx_id
                START WITH link_trx_id IS NULL))


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Lệnh dequeue Oracle AQ

  2. Trích xuất tổng số giây từ một kiểu dữ liệu khoảng thời gian

  3. Truy vấn SQL của Oracle - tạo bản ghi giữa hai ngày

  4. Cách thay đổi giá trị bắt đầu trình tự db

  5. Dữ liệu lớn SQL của Oracle