Как я могу объединить значения в одной ячейке на основе условия в Oracle SQL?

#sql #oracle

Вопрос:

У меня есть таблица со значениями:

ID Тип Текст
1 записка примечание пользователя 1
2 замечание замечание пользователя
3 записка примечание пользователя 2
4 записка примечание пользователя 3
5 замечание замечание адм

Как я могу создать другой столбец, в котором я мог бы выбрать объединенные значения из столбца «Текст». Мне нужно выбрать только столбец типа и объединить значения с делиметром на основе значения типа. Таблица должна выглядеть так:

Тип Текст
записка примечание пользователя 1; примечание пользователя 2; примечание пользователя 3
замечание замечание пользователя; замечание adm

Заранее благодарю вас!

Ответ №1:

Одним из вариантов было бы использовать listagg

 with x ( id, category, comments )as 
(
select 1 , 'note'   , 'note by user1'   from dual union all
select 2 , 'remark' , 'remark by user'  from dual union all
select 3 , 'note'   , 'note by user2'   from dual union all
select 4 , 'note'   , 'note by user 3'  from dual union all
select 5 , 'remark' , 'remark by adm'   from dual 
)
select category, listagg(comments,';' ) within group (order by id)
from x 
group by category ;
 

бд<>скрипка <>здесь

Комментарии:

1. Спасибо. Но что, если у меня есть сотни уникальных типов?

2. как насчет этого ? вы группируетесь по нему, поэтому он получит только отдельные. Независимо от того, сколько их

3. Большое спасибо. Но что, если у меня больше столбцов, и я не могу выбрать конкретный столбец для группировки?

4. @СаятОразов Тогда вам нужно выяснить, что вы можете GROUP BY , потому что если вы (как человек) не можете определить, как логически организовать строки в группы, то как механизм SQL сможет выполнить эту задачу?