Oracle SQL - 如何在一行中显示一对多关系?

Oracle SQL - How to show one to many relationship in a single row?

我有一个名为 MY_MOVIES 的 table,它有两列:MOVIES 和 GENRES,就像这样(关系是一部电影与多种类型):

GENRE         MOVIE
----------    --------------           
ACTION        MOVIE1
DRAMA         MOVIE1
CRIME         MOVIE2
DRAMA         MOVIE2
CRIME         MOVIE3
DRAMA         MOVIE3
ACTION        MOVIE4
ADVENTURE     MOVIE4
FANTASY       MOVIE4
ANIMATION     MOVIE5
ADVENTURE     MOVIE5
COMEDY        MOVIE5

这个 table 有超过 100000 行。

我正在尝试获得这样的输出:

MOVIES        GENRES
----------    -------------- 
MOVIE1        ACTION, DRAMA
MOVIE2        CRIME, DRAMA
MOVIE3        CRIME, DRAMA
MOVIE4        ACTION, ADVENTURE, FANTASY
MOVIE5        ANIMATION, ADVENTURE, COMEDY

我正在尝试像这样使用 PIVOT(有稍后将 0 和 1 替换为流派的想法):

SELECT * FROM MY_MOVIES 
PIVOT (COUNT(MOVIE) FOR GENRE in (SELECT DISTINCT(GENRE) FROM MY_MOVIES) as MOVIE_GENRES

我一直在想我做错了。

假设您使用的是 Oracle(版本 11gR2 或更高版本):

select movies,
       listagg(genre, ', ') within group (order by genre) as genres
from my_movies
group by movies;