Используйте LISTAGG
и используйте ROWNUM
для сохранения существующего заказа:
Установка Oracle :
CREATE TABLE your_table ( value, order_index ) AS
SELECT 'Orange', 1 FROM DUAL UNION ALL
SELECT 'Apple', 2 FROM DUAL UNION ALL
SELECT 'PineApple', 3 FROM DUAL UNION ALL
SELECT 'Grapes', 4 FROM DUAL;
Запрос :
WITH pre_ordered_values ( value ) AS (
SELECT value FROM your_table ORDER BY order_index
)
SELECT LISTAGG( value, ',' ) WITHIN GROUP ( ORDER BY ROWNUM ) AS aggregated_values
FROM pre_ordered_values
Выход :
| AGGREGATED_VALUES |
| :---------------------------- |
| Orange,Apple,PineApple,Grapes |
дБ <> скрипка здесь
(Примечание: строки из таблицы извлекаются в недетерминированном порядке, и изменение данных в таблице, восстановление таблицы из резервных копий или включение перемещения строк может изменить порядок, в котором Oracle будет возвращать строки. Если вам требуется упорядочениетогда это должно быть применено к данным, а не предполагать неявный порядок, в котором будут генерироваться строки.)