Как объединить все записи, возвращаемые объединенным подзапросом (связанным с идентификатором основной таблицы), в один объединенный столбец? - PullRequest
0 голосов
/ 23 апреля 2019

Допустим, у меня есть основная таблица драйверов с именем Employee со следующими данными и столбцами:

 EMPLOYEE_ID    EMPLOYEE_NAME      EMPLOYEE_CAR     EMPLOYEE_AGE
 ----------------------------------------------------------------
     1          Mike               Camry                35          
     2          Mark               Civic                33
     3          Helen              Beetle               25

И у меня есть еще одна таблица с именем Employee_Feedback со следующими данными и столбцами:

 EMPLOYEE_FEEDBACK_ID     EMPLOYEE_ID       FEEDBACK_COMMENT_TX
 ---------------------------------------------------------------
        1                      1              Very Good
        2                      1              Average
        3                      1              Phenomenal
        4                      2              Okay
        5                      2              NO Comment
        6                      3              Excellent
        7                      3              Hilarious

С данными из таблиц Employee и Employee_Feedback я хочу, чтобы мой запрос мог возвращать все строки в Employee, а также объединять все «связанные» сообщения обратной связи сотрудника из Employee_feedback в один столбец на сотрудника.Это выглядело бы так:

 EMPLOYEE_NAME    EMPLOYEE_CAR     EMPLOYEE_AGE   Comments
 ------------------------------------------------------------------------
 Mike             Camry              35           Very Good Average Phenomenal
 Mark             Civic              33           Okay No Comment 
 Helen            Beetle             25           Excellent Hilarious

Какой хороший запрос для этого?Я попробовал следующее безуспешно:

select employee_name
     , employee_car
     , employee_age
     , listagg(feedback_comment_Tx, ' ') within group (order by e.employee_id)
  from employee e
  join employee_feedback ef ON ef.employee_id = e.employee_id;

Я пропустил незначительную деталь?Заранее спасибо!

Ответы [ 3 ]

1 голос
/ 23 апреля 2019

Вы пытались добавить group by e.employee_id в конце запроса, как это

select employee_name
 , employee_car
 , employee_age
 , listagg(feedback_comment_Tx, ' ') within group (order by e.employee_id) 
   from employee e join employee_feedback ef ON ef.employee_id = e.employee_id 
    group by e.employee_id
1 голос
/ 23 апреля 2019
select employee_name
     , employee_car
     , employee_age
     , listagg(feedback_comment_Tx, ' ') within group (order by ef.EMPLOYEE_FEEDBACK_ID)
  from employee e
  join employee_feedback ef ON ef.employee_id = e.employee_id
  group by e.employee_id;
1 голос
/ 23 апреля 2019

В конце необходимо добавить предложение group by:

group by employee_name, employee_car, employee_age

Редактировать: включая ваши фильтры в комментарии, вы можете попробовать следующее:

select employee_name
     , employee_car
     , employee_age
     , listagg(feedback_comment_Tx, ' ') within group (order by e.employee_id)
  from employee e
  join employee_feedback ef ON ef.employee_id = e.employee_id
 where nvl(initcap(feedback_comment_Tx),'No Comment') != 'No Comment'
 group by employee_name, employee_car, employee_age;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...