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

Gor*_*way 0 sql oracle pivot string-concatenation

我有一个名为MY_MOVIES的表,有两列: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
Run Code Online (Sandbox Code Playgroud)

该表有超过100000行.

我想要得到这样的输出:

MOVIES        GENRES
----------    -------------- 
MOVIE1        ACTION, DRAMA
MOVIE2        CRIME, DRAMA
MOVIE3        CRIME, DRAMA
MOVIE4        ACTION, ADVENTURE, FANTASY
MOVIE5        ANIMATION, ADVENTURE, COMEDY
Run Code Online (Sandbox Code Playgroud)

我正在尝试使用像这样的PIVOT(有了将0和1替换为类型的想法):

SELECT * FROM MY_MOVIES 
PIVOT (COUNT(MOVIE) FOR GENRE in (SELECT DISTINCT(GENRE) FROM MY_MOVIES) as MOVIE_GENRES
Run Code Online (Sandbox Code Playgroud)

我一直以为我做错了.

Gor*_*off 6

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

select movies,
       listagg(genre, ', ') within group (order by genre) as genres
from my_movies
group by movies;
Run Code Online (Sandbox Code Playgroud)