как получить одну строку, разделенную запятыми, из нескольких строк в Oracle без изменения порядка - PullRequest
0 голосов
/ 26 марта 2019

У меня есть таблица, которая содержит следующие данные:

Orange
Apple
PineApple
Grapes

Последний вывод, который мне нужен: Orange,Apple,PineApple,Grapes

Я не могу использовать функцию LISTAGG, потому что я не хотите менять порядок , в котором встречаются данные.

Как этого достичь?

1 Ответ

3 голосов
/ 26 марта 2019

Используйте 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 будет возвращать строки. Если вам требуется упорядочениетогда это должно быть применено к данным, а не предполагать неявный порядок, в котором будут генерироваться строки.)

...