Jedynym sposobem, jaki przychodzi mi na myśl, aby to osiągnąć, jest skorelowane podzapytanie:
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;
Zdaję sobie sprawę, że nie daje to dokładnych wyników, o które prosiłeś, ale mam nadzieję, że wystarczy, aby przezwyciężyć problem skumulowanej LISTAGG i pomóc Ci przejść dalej.
Skonfigurowałem SQL Fiddle aby zademonstrować rozwiązanie.