如何使用SQL将列组合到一列中

时间:2013-11-01 04:03:43

标签: sql oracle

我有一个基于我的项目的问题,为了清楚地描述问题,我提取下面的3个简化表来演示。

第一张表P_COURSE和里面的数据。

COURSE_ID, PRIMARY_INSTRUCTOR_ID
---------------------------------
1            1
2            4

第二张表P_COURSE_OTHER_INSTRUCTOR及其中的数据。

COURSE_ID, INSTRUCTOR_ID
-------------------------
1            2
1            3
2            5

第三张表P_INSTRUCTOR和里面的数据。

INSTRUCTOR_ID, FIRST_NAME, LAST_NAME
-----------------------------------
1           Furtado      Rico
2           Steptoe      Anne
3           Beaton       Alan
4           Fuston       Arch
5           Hoyano       Aida

我想要的输出是:

COURSE_ID, INSTRUCTORS
-----------------------------------
1        Furtado Rico, Steptoe Anne, Beaton Alan
2        Fuston Arch, Hoyano Aida

有没有什么方法可以获得结果?我知道我可以在其他教师身上使用内置函数LISTAGG(),但我该如何处理主教练呢?

1 个答案:

答案 0 :(得分:0)

请尝试:

select 
  COURSE_ID,
  listagg(FIRST_NAME||' '||LAST_NAME, ',') 
    within group (order by COURSE_ID) as list 
from 
(
  SELECT COURSE_ID, PRIMARY_INSTRUCTOR_ID
  FROM P_COURSE

  UNION ALL

  SELECT COURSE_ID, INSTRUCTOR_ID
  FROM P_COURSE_OTHER_INSTRUCTOR
)x 
  INNER JOIN P_INSTRUCTOR y 
  on x.PRIMARY_INSTRUCTOR_ID=y.INSTRUCTOR_ID
group by COURSE_ID

SQL Fiddle Demo