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 – наименование результирующего поля

 


 

Например, есть запрос по сотрудникам компании и отделам:

 

EMPLOYEE_ID

DEPARTMENT

140

Executive

140

Finance

274

Marketing

274

Purchasing

274

Quality Assurance

 

Требуется вывести список сотрудников, в котором отделы по каждому сотруднику перечислялись бы в одной строке через запятую:

 

EMPLOYEE_ID

DEPARTMENT

140

Executive, Finance

274

Marketing, Purchasing, Quality Assurance

 

 

SELECT DISTINCT * FROM (

EMPLOYEE_ID,

listagg(DEPARTMENT, ', ') WITHIN GROUP(

   ORDER BY DEPARTMENT) over(partition BY EMPLOYEE_ID) AS DEPARTMENT

FROM EMPL_DEP_HIST

)

 



© 2018 | Анна Петросян | pashelp@yandex.ru