2012-09-24 2 views
2

내가이 개 내 데이터베이스에서이 같은 테이블이 : 영화 표에서외래 키에 의한 SQL 쿼리 그룹은 어떻습니까?

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

을, 나는 장르 테이블의 기본 키에 연결되어 외부 키를 가지고있다. 여기에 내 질문입니다 :

장르별로 그룹화하여 데이터 그룹에 표시하고 싶습니다. 쿼리는 어떻게해야합니까? 그룹 필름에

Horror: film1 

Horror: film2 

Romance: film3... 

... 

내가 좋아하는 것 :이 결과를 가지고

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

:

Commedy: film5, film6 

Horror: film1, film 2 

Romance: film3, film4 

이 지금은이 쿼리를 사용

내가 원하는 결과는 무엇인가 같다 장르별.

답변

3

SQL 서버 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 
+0

감사합니다, Vipul Paralikar. 그게 날 도와 줬어. – loveprogramming

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 

내가 테스트 MS SQL 서버를 가지고 있지 않지만,이 작업을해야합니다

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) 
+0

안녕하세요, Reza, 대단히 죄송합니다. Microsoft SQL Server 2008 R2를 사용한다는 사실을 잊어 버렸습니다. 따라서 group_concat이 작동하지 않습니다. MS SQL Server 2008 R2를위한 솔루션? 감사. – loveprogramming

+0

안녕하세요, SQL Server를 사용하지 않아서 완전한 솔루션을 제공 할 수 없습니다. 그러나 wm_concat과 동일한 것을 찾을 수 있다면. 나는 그것을 찾으려고 노력할 것이다. – RGO