Oracle Sql выбрать все значения подряд без использования агрегатных функций и процедур - PullRequest
0 голосов
/ 06 марта 2020

У меня есть этот код:

select eto.id,( epe.surname || ' ' || epe.name  || ' ' || epe.patronymic) fio
                        from employee_trip_orders eto
                        left join employee_card_order_links ecol
                        on eto.id = ecol.trip_order_id
                        left join employee_trip_cards etc
                        on ecol.trip_card_id = etc.employee_trip_card_id 
                        left join eip_persons.employees epe
                        on etc.employee_id = epe.employee_id
                        where eto.id=2223
                        order by eto.id

и результат выполнения этого кода

id     fio
------------
2223 John Smith Brown
2223 Jack Orange Apple
2223 Jordan Stinky Tomato

Я хотел бы преобразовать это в одну строку с разделителями-запятыми

id     fio
-------------------------------
2223 |  John Smith Brown,
     |  Jack Orange Apple,
     |  Jordan Stinky Tomato
-------------------------------

Как я могу добиться этого без использования внешних функций, функций группировки и объединения? Спасибо

1 Ответ

1 голос
/ 06 марта 2020

Вы можете сделать это, используя запрос connect by, но он медленнее и сложнее простого listagg().

select id, ltrim(sys_connect_by_path(fio, ', '), ', ') names
  from (select row_number() over (partition by id order by fio) rn, id, fio from t)
  where connect_by_isleaf = 1
  connect by id = prior id and rn = prior rn + 1
  start with rn = 1

dbfiddle

...