Oracle
 sql >> डेटाबेस >  >> RDS >> Oracle

विंडोिंग क्लॉज के बराबर LISTAGG

इसे प्राप्त करने का एकमात्र तरीका मैं एक सहसंबद्ध उपश्रेणी के साथ सोच सकता हूं:

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;

मुझे एहसास है कि यह सटीक आउटपुट नहीं देता है जो आप मांग रहे थे, लेकिन उम्मीद है कि यह संचयी LISTAGG की समस्या को दूर करने और आपको अपने रास्ते पर लाने के लिए पर्याप्त है।

मैंने एक SQL Fiddle सेट किया है समाधान प्रदर्शित करने के लिए।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. ORA-01264:लॉगफ़ाइल फ़ाइल नाम बनाने में असमर्थ

  2. ओरेकल में एक पंक्ति को कैसे हटाएं

  3. जेपीए इकाई वर्ग 2 @GeneratedValue फ़ील्ड के साथ त्रुटि दे रहा है

  4. कई तालिकाओं से ओरेकल का चयन करें

  5. Oracle SQL:IN खंड से गैर-मौजूदा मानों को पुनः प्राप्त करना