SQL (Redshift) объединить несколько строк под одним идентификатором - PullRequest
1 голос
/ 21 июня 2020

В моей таблице 3 столбца

Products (product_id, product_detail_name, product_detail_value)

Для каждого продукта я хочу, чтобы все его данные были в одной ячейке, то есть в следующем формате:

product_id, concatenated_values

Ответы [ 2 ]

0 голосов
/ 21 июня 2020

Вы также можете использовать второй раздел LISTAGG для определения разделителя.

Select product_id,
Listagg(product_detail_name || ':' || product_detail_value, ' ,') p_details
from mytable
Group By product_id;
0 голосов
/ 21 июня 2020

Используйте функцию агрегирования строк listagg():

select product_id, listagg(product_detail_value) product_details
from mytable
group by product_id

Или, если вы хотите видеть результаты в виде пар 'name: value', разделенных запятыми, тогда:

select 
    product_id, 
    listagg(product_detail_name || ': ' || product_detail_value) product_details
from mytable
group by product_id

listagg() также поддерживает предложение order by (с синтаксисом within group), которое описано в документации.

...