2

私のデータベースには、このような2つのテーブルがあります。

Genre: Horror, Romance, Commedy, 
Film: film1, film2, film3,film4,film5,film6

Filmテーブルには、GenreTableの主キーに接続されている外部キーがあります。これが私の質問です:

すべての映画を取得してジャンル別にグループ化し、データリストに表示したいのですが、クエリはどうすればよいですか?

私が欲しい結果は次のようなものです:

Commedy: film5, film6

Horror: film1, film 2

Romance: film3, film4

今、私はこのクエリを使用します:

Select genre,film
from Genre
inner join film on film.genrID=genre.genreID
order by genre,film ASC

私はこの結果を得ました:

Horror: film1

Horror: film2

Romance: film3...

...

映画をジャンル別にグループ化したいと思います。

4

2 に答える 2

3

SQL Server 2008:

SELECT um.genre,
                 CONVERT(varchar(1000),  stuff(  
                          (SELECT   
                              ', ' +  film 
                              FROM tbl_Film p2  
                              WHERE p2.genreid=um.id  
                              ORDER BY film  
                              FOR XML PATH('')  
                           ) 
                           ,1,2, ''  
                       ))AS film

               FROM tbl_Film p1   
               inner join tbl_Genre um on um.id=p1.genreid   
              GROUP BY    
              um.id,um.genre
于 2012-09-24T06:01:40.540 に答える
0

MySQL:

Select genre, group_concat(film) films
    from Genre
    inner join film on film.genrID=genre.genreID
    group by Genre.genreID, genre
    order by genre,films ASC

オラクル:

Select genre, wm_concat(film) films
    from Genre
    inner join film on film.genrID=genre.genreID
    group by genrID, genre
    order by genre,films ASC

テストするMSSQLServerがありませんが、これは機能する必要があります。

select a.genre, SUBSTRING(d.Films,1, LEN(d.Films) - 1) FilmList
from 
  (
    SELECT genrID,genre
    FROM Genre
  ) a
CROSS APPLY
  (
    SELECT [film] + ', ' 
    FROM (
      Select genrID,film
      from Genre
      inner join film on film.genrID=genre.genreID
    ) AS B 
    WHERE A.genrID = B.genrID 
    FOR XML PATH('')
  ) D (Films) 
于 2012-09-24T05:35:24.123 に答える