SQL for Oracle | LISTAGG |
С помощью оператора LISTAGG можно сгруппировать данные массива в одну строку (аналог оператора STUFF (T-SQL)).
listagg(FIELD_NAME_1, ', ') WITHIN GROUP( ORDER BY FIELD_NAME_2) over(partition BY FIELD_NAME_3) AS FIELD_NAME_4
listagg(FIELD_NAME_1, ', ')
FIELD_NAME_1 – наименование поля, данные которого треубется скрутить в строку; ', ' – символ для перечисления элементов
ORDER BY FIELD_NAME_2
FIELD_NAME_2 – поле сортировки
over(partition BY FIELD_NAME_3)
FIELD_NAME_3 – поле, элементы которого представляют массив
AS FIELD_NAME_4
FIELD_NAME_4 – наименование результирующего поля
Например, есть запрос по сотрудникам компании и отделам:
Требуется вывести список сотрудников, в котором отделы по каждому сотруднику перечислялись бы в одной строке через запятую:
SELECT DISTINCT * FROM ( EMPLOYEE_ID, listagg(DEPARTMENT, ', ') WITHIN GROUP( ORDER BY DEPARTMENT) over(partition BY EMPLOYEE_ID) AS DEPARTMENT FROM EMPL_DEP_HIST )
|