#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 сможет выполнить эту задачу?