Есть несколько разных подходов к этому.Самым простым является презентация: решите это на дисплее переднего конца.В SQL * Plus это было бы ключевое слово BREAK:
SQL> BREAK ON courseid ON coursename
SQL>
SQL> select c.courseid
2 , c.coursename
3 , s.studentname
4 from courses c
5 join course_students cs
6 on ( cs.courseid = c.courseid )
7 join students s
8 on ( s.studentid = cs.studentid )
9 /
COURSEID COURSENAME STUDENTNAME
---------- ---------- --------------------
1 math john smith
jack jackson
john jackson
2 english michael thomas
jane doe
SQL>
Другой подход заключается в использовании встроенного курсора:
SQL> select c.courseid
2 , c.coursename
3 , cursor (select s.studentname
4 from course_students cs
5 join students s
6 on ( s.studentid = cs.studentid )
7 where cs.courseid = c.courseid
8 )
9 from courses c
10 /
COURSEID COURSENAME CURSOR(SELECTS.STUDE
---------- ---------- --------------------
1 math CURSOR STATEMENT : 3
CURSOR STATEMENT : 3
STUDENTNAME
--------------------
john smith
john jackson
jack jackson
2 english CURSOR STATEMENT : 3
CURSOR STATEMENT : 3
STUDENTNAME
--------------------
jane doe
michael thomas
SQL>
Мы можем обсудить, действительно ли это считается «одной строкой»":)
Наконец, у нас есть методы агрегирования строк.Существует несколько различных способов нарезки этой конкретной капусты, потому что - невероятно - только в самом последнем выпуске Oracle предоставил стандартную встроенную функцию для этого.Поскольку я не на 11gR2, я буду использовать WM_CONCAT () вместо LISTAGG ():
SQL> select c.courseid
2 , c.coursename
3 , wm_concat(s.studentname) as studentnames
4 from courses c
5 join course_students cs
6 on ( cs.courseid = c.courseid )
7 join students s
8 on ( s.studentid = cs.studentid )
9 group by c.courseid
10 , c.coursename
11 /
COURSEID COURSENAME STUDENTNAMES
---------- ---------- ---------------------------------------------
1 math john smith,john jackson,jack jackson
2 english jane doe,michael thomas
SQL>
Сайт Oracle-Base Тима Холла имеет сводку всех опций агрегации строк. Узнать больше .