2016-10-03 5 views
0

я должен сцепить ниже данныхСоединить строки, на основе общего столбца Oracle

a b c 
1 Text 22-03-2015 
1 Text1 22-03-2015 
2 Text2 24-05-2015 
3 Text5 29-05-2015 
1 Text11 23-03-2015 

И ожидаемый результат является

a b c 
1 Text,text1 22-03-2015 
1 Text11 23-03-2016 
2 Text2 24-05-2015 
3 Text5 29-05-2015 

Пробовал wm_concat функции и она работает, но я не могу удалить дубликаты из данные и использование LISTAGG приводит к ошибке

«ор-01489 результата ул конкатенация слишком длинна в оракуле "

ошибка в столбцах b содержит значения, превышающие 4000 символов.
Любые альтернативы, кроме этих двух функций?

+1

Одним из вариантов было бы использовать подзапрос с 'distinct'. Это может помочь: http://stackoverflow.com/questions/19577257/wm-concat-with-distinct-clause-compiled-package-versus-stand-alone-query-issue – sgeddes

+0

Различий не работает. Этот запрос сам по себе является подзапросом. –

+0

Непонятно, почему из ваших данных образца. Вы должны предоставить образцы данных, которые иллюстрируют проблему, с которой вы сталкиваетесь. Возможно, создайте sqlfiddle.com для демонстрации. – sgeddes

ответ

1

Вы можете использовать LISTAGG функцию, если вы Oracle 11g+

SELECT a, LISTAGG(b, ' ') WITHIN GROUP (ORDER BY b) as b, c 
FROM yourtable 
GROUP BY a,c; 
+0

ли LISTAGG функция имеет предел из 4000 символов в Oracle 12c? –

+1

@AnnieJeba Да, когда строка длиннее 4000 байтов, она ограничит результат. Проверьте этот ответ для получения дополнительной информации http://stackoverflow.com/questions/13795220/listagg-function-result-of-string-concatenation-is-too-long –

+0

Спасибо, что это работает :) –