简体   繁体   English

如何将由联接的子查询(与主表ID相关)返回的所有条目串联到单个组合列中?

[英]How to concatenate all entries returned by a joined subquery (related to the main table id) into a single combined column?

Let's say I have a main driver table called Employee with the following data and columns: 假设我有一个名为Employee的主驱动程序表,其中包含以下数据和列:

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

And I have another table called Employee_Feedback with the following data and columns: 我还有一个名为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

With the data from the Employee and Employee_Feedback tables, I want my query to be able to return all of the rows in Employee and also to concatenate all of the 'related' employee feedback_comments from Employee_feedback into a single column per employee. 从数据EmployeeEmployee_Feedback表,我想我的查询能够返回所有行的员工,也给所有从“相关”员工feedback_comments的串联Employee_feedback到每名员工的一列。 It would look like this: 它看起来像这样:

 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

What would be a good query to do this? 什么是一个很好的查询来做到这一点? I've tried the following with no success: 我已经尝试了以下方法,但均未成功:

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;

Am I missing a minor detail? 我是否缺少细节? Thanks in advance! 提前致谢!

You need to add a group by clause at the end : 您需要在最后添加一个group by子句:

group by employee_name, employee_car, employee_age

Edit : including your filters in the comment, you may try the following : 编辑:在评论中包含过滤器,您可以尝试以下操作:

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;

Have you tried to add group by e.employee_id at the end of query like that 您是否试图在查询末尾group by e.employee_id添加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
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;

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM