Вот один вариант, использующий коррелированный подзапрос для обработки свертки столбца value
:
SELECT
t1.id,
t1.group_id,
(SELECT LISTAGG(t2.val, '') WITHIN GROUP (ORDER BY t2.id)
FROM yourTable t2
WHERE t1.group_id = t2.group_id AND t2.id <= t1.id) AS vals
FROM yourTable t1
ORDER BY
t1.id;
Демо
Логика здесь заключается в том, что для каждой группы при свертывании происходит конкатенация всех значений, приходящихся на текущее значение id
в данной строке или перед ним.
Другим подходом к этому, который мог бы работать и масштабироваться лучше, было бы использование рекурсивного CTE. Но для этого потребуется больше кода, и его будет сложнее переварить, чем то, что я написал выше.