2013-06-17 3 views
0

У меня есть 3 колонки в моей тестовой таблицы, какобъединить несколько строк в одну строку в Oracle?

ID | m_id | S_m_id         
---------- -------------- 
1 | 1  | 1     
1 | 2  | 3     
1 | 3  | 4     
1 | 5  | 6     
2 | 1  | 1     
2 | 2  | 3     
2 | 3  | 4     
3 | 5  | 6 

Я хочу объединить столбец 2 и 3 основаны на колонке 1 в одной строке. И результат должен быть как

ID | merge_id         
---------- -------------- 
1 | 1,1;2,3;3,4;5,6     
2 | 1,1;2,3;3,4     
3 | 5,6  
+0

Это называется агрегация строк - поиск SO для многих примеров –

ответ

4

Функция, что вам нужно, это listagg() с делает конкатенацию при агрегировании. Кроме того, необходимо сначала сцепить идентификаторы вместе:

select id, 
     listagg(m_id || ',' || s_m_id, ';') within group (order by m_id) as merge_ids 
from test t 
group by id; 

Кстати, данные результата неверно (поскольку идентификатор является одинаковым на всех трех рядах). Это, вероятно, объясняет нижний предел.

EDIT (в ответ на комментарий):

У вас есть два сепаратора в исходном примере, одна запятая (между идентификаторами) и одна является точкой с запятой (между рядами). Вы можете заменить либо '|', чтобы получить разделитель труб.

+0

привет гордону спасибо ... это сработало ... но как я могу объединить столбец id с разделителем |. – user1251973

+0

хотите слить сейчас 1 столбец и 2-й столбец с трубкой separtor – user1251973

+0

выберите id, test.nextval listagg (m_id || ',' || s_m_id, ';') внутри группы (заказ m_id) как merge_ids из теста t группа по id; Используя этот запрос, я получаю порядковый номер ora - 02287, который здесь не разрешен. – user1251973

Смежные вопросы