0

我有一个基于我的项目的问题,为了清楚地描述这个问题,我在下面提取了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(),但是我该如何处理主要讲师呢?

4

1 回答 1

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 小提琴演示

于 2013-11-01T04:24:53.833 回答