2016-12-02 5 views
0

У меня есть набор данных с именами в одном столбце вместе с несколькими другими столбцами. Я хотел бы показать, где все остальные значения в полях одинаковы, объединить имена.Объединить значения из нескольких строк из одного поля, агрегируя

например.

col 1 col 2 col 3 
    a  1  mary 
    a  1  jane 
    a  1  kevin 
    b  2  mary 
    b  2  jane 
    b  2  kevin 
    c  3  mary 
    c  3  jane 
    c  3  kevin 

выход быть:

a  1  mary, jane, kevin 
b  2  mary, jane, kevin 
c  3  mary, jane, kevin 

Я попытался с помощью RTRIM, но ничего не делает. Я также пробовал использовать listagg, но получаю сообщение об ошибке «Не группа по выражению»

Все поля являются строками и не могут быть вычислены.

ТИА

+0

вы знаете, вы должны использовать 'listagg'. можете ли вы показать свою текущую попытку? –

+0

Если у вас есть ошибка «не группа по выражению» при попытке 'listagg()' - вы пытались добавить предложение GROUP BY? Еще более элементарно, когда вы пытались «listagg()», и это не сработало, вы использовали Google (с поисковой фразой типа «Oracle listagg»)? Это привело бы вас к документации Oracle, объясняя, что это за функция, правильный синтаксис и несколько примеров. Получите привычку к документации Google для Google, вы найдете ее как минимум такой же полезной, как этот сайт. – mathguy

ответ

3

Подробнее here

select col1, 
     col2, 
     listagg(col3,  -- The aggregated column 
       ',')  -- The delimiter 
     within group -- Because this is an aggregated function, needs to be grouped 
     (order by Col3) -- We can order the aggregated values 
      as Col3  -- And an alias for good measure 
from TableA 
group by col1, col2 

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

  • Нет связанных вопросов^_^