0

私のプロジェクトに基づいて質問があります。質問を明確に説明するために、以下の 3 つの簡略化された表を抽出して説明します。

最初のテーブル P_COURSE とその中のデータ。

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

2 番目のテーブル P_COURSE_OTHER_INSTRUCTOR とその中のデータ。

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

3 番目のテーブル 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 に答える