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;
我有一个名为 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;