【发布时间】:2016-07-10 05:57:48
【问题描述】:
我有 3 张桌子
电影:
- Movie_id
- 标题
- 运行时
- Date_id
- ...
类型:
- 流派_id
- 类型
电影类型:
- Movie_id
- 流派_id
我想将它们放在一行中,以便每个流派由一列分隔 像这样:
Movie_id | Title | Genre1 | Genre2 | Genre3 | Genre4 |
每部电影可能有也可能没有多达 4 种类型。
我很接近这种方法:
SELECT
Movies.Movie_id,
MAX(Movies.Title),
MAX(CASE WHEN p.RowNum=1 THEN p.Genre_id END) as Genre1,
MAX(CASE WHEN p.RowNum=2 THEN p.Genre_id END) as Genre2,
MAX(CASE WHEN p.RowNum=3 THEN p.Genre_id END) as Genre3,
MAX(CASE WHEN p.RowNum=4 THEN p.Genre_id END) as Genre4
FROM
Movies
JOIN
(SELECT
Movie_Genre.*,
ROW_NUMBER() OVER (PARTITION BY Movie_id ORDER BY Genre_id) AS RowNum
FROM
Movie_Genre) AS P ON Movies.Movie_id = p.Movie_id
GROUP BY
Movies.movie_id
但我最终得到的是 Genre_id 而不是流派名称。
标题栏也没有命名
【问题讨论】:
-
样本数据和输出将使我们的生活更轻松
标签: sql sql-server