मैं व्यक्तिगत रूप से इस कार्य के लिए pl/sql फ़ंक्शन को प्राथमिकता दूंगा, लेकिन यदि आप इसे शुद्ध sql में करना चाहते हैं तो आप निम्न क्वेरी का उपयोग कर सकते हैं:
WITH ord AS (SELECT id, num_rows, ROWNUM ord FROM myTable)
, rek(ord, id, num_rows, sum_rows, groupId) AS
(SELECT ord, id, num_rows, num_rows, 1 FROM ord WHERE ord = 1
UNION ALL
SELECT rek.ord +1
, ord.id
, ord.num_rows
, CASE WHEN rek.sum_rows + ord.num_rows > 500
THEN ord.num_rows
ELSE rek.num_rows + ord.num_rows
END
, CASE WHEN rek.sum_rows + ord.num_rows > 500
THEN rek.groupID + 1
ELSE rek.groupID
END
FROM rek
JOIN ORD
ON ord.ord = rek.ord+1)
SELECT id, num_rows, groupid
FROM rek
/
ध्यान दें कि यह क्वेरी समूह बनाने के लिए मेल खाने वाली प्रविष्टियों की खोज नहीं करती है जैसे कि योग <500 है क्योंकि यह तथाकथित knapsack समस्या से निकटता से संबंधित है (s. https://en.wikipedia.org/wiki/Knapsack_problem ), जिसे हल करना आसान नहीं है...