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

LISTAGG tương đương với mệnh đề cửa sổ

Cách duy nhất tôi có thể nghĩ ra để đạt được điều này là sử dụng một truy vấn con tương quan:

WITH CTE AS
(   SELECT  TranID, 
            TranLine, 
            ItemID, 
            OrderID, 
            Dollars, 
            Quantity, 
            SUM(dollars) OVER (PARTITION BY TranID, ItemID, OrderID ORDER BY TranLine) AS CumDollar, 
            SUM(Quantity) OVER (PARTITION BY TranID, ItemID, OrderID ORDER BY TranLine) AS CumQuantity
    FROM    T
)
SELECT  TranID, 
        TranLine, 
        ItemID, 
        OrderID, 
        Dollars, 
        Quantity, 
        CumDollar, 
        CumQuantity, 
        (   SELECT  LISTAGG(Tranline, ';') WITHIN GROUP(ORDER BY CumQuantity)
            FROM    CTE T2
            WHERE   T1.CumQuantity >= T2.CumQuantity
            AND     T1.ItemID = T2.ItemID
            AND     T1.OrderID = T2.OrderID
            AND     T1.TranID = T2.TranID
            GROUP BY tranid, itemid, orderid
        ) AS ListAgg
FROM    CTE T1;

Tôi nhận thấy rằng điều này không cung cấp kết quả chính xác mà bạn yêu cầu, nhưng hy vọng nó đủ để khắc phục sự cố LISTAGG tích lũy và đưa bạn đi trên con đường của mình.

Tôi đã thiết lập SQL Fiddle để chứng minh giải pháp.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cách thêm ràng buộc không null trên cột chứa giá trị null

  2. Khóa Liquibase - lý do?

  3. ORA-01618

  4. Cách xác định Quy trình gói Oracle trong H2 để kiểm tra

  5. 24 câu hỏi phỏng vấn người quản lý đồng thời tuyệt vời