By using db<>fiddle, you agree to license everything you submit by Creative Commons CC0.
SELECT
LISTAGG(X, ',') WITHIN GROUP(
ORDER BY
X
) as result
FROM
(
SELECT
X,
SUM(LENGTH(X)) OVER(
ORDER BY
X
) LENGTH_X,
COUNT(1) OVER(
ORDER BY
X
) - 1 AS COMMAS
FROM
(
SELECT
LEVEL X
FROM
DUAL
CONNECT BY
LEVEL <= 20
)
)
GROUP BY
CEIL((LENGTH_X + COMMAS) / 15)
RESULT |
---|
1,2,3,4,5,6,7,8 |
9,10,11,12,13 |
14,15,16,17,18 |
19,20 |