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