2014-04-10 3 views
0

저는 Artist_ID, Artist_Name, Artist_Genre 열이있는 '아티스트'라는 테이블이 있으며 동일한 장르를 공유하는 아티스트를 나열하는 방법을 알아 내려고하고 있습니다.열 값이 일치하는 단일 테이블에서 데이터 표시

자기 조인이 필요할 수도 있지만 거기에 도달 할 수는 없다고 생각합니다. 좀 도와 줄 수있어?

Desired Output 
Artist Artist 2 Shared Genre 
A  B  Classic 
B  C  Pop 
+0

어떤 유형의 데이터베이스 (RDBMS)입니까? –

+0

다른 아티스트가 있다면 3 명이 장르를 공유합니까? 아티스트 3 열을 출력 하시겠습니까? 또는 장르 + 아티스트 클래식의 CSV 목록과 같은 항목으로 정말 더 나아 졌습니까? A, B, D 팝 | B, C –

답변

1

SQL Server에서 이것은 사용자가 요구하는대로 수행 할 수 있지만 실제로는 사용자가 요구하는 것이 아니라고 생각합니다.

CREATE TABLE Artists(Artist_ID INT, Artist_Name VARCHAR(100), Artist_Genre VARCHAR(20)) 

INSERT INTO Artists VALUES 
(1,'A','Classic') 
,(2,'B','Classic') 
,(2,'B','Pop') 
,(3,'C','Pop') 

SELECT a.Artist_Name [Artist 1] 
     ,b.Artist_Name [Artist 2] 
     ,a.Artist_Genre [Shared Genre]   
    FROM Artists a 
     INNER JOIN 
     Artists b ON a.Artist_Genre = b.Artist_Genre 
WHERE a.Artist_ID < b.Artist_ID 

EDIT : 그룹별로 그룹화하고 아티스트 목록을 생성 할 수 있다는 것을 보여줄 가치가 있다고 생각합니다. SQL Server에서는 구문이 엉망이지만 작업이 완료됩니다.

SELECT b.Artist_Genre, 
     STUFF((SELECT ',' + CAST(Artist_Name AS VARCHAR(MAX)) 
       FROM Artists a 
       WHERE a.Artist_Genre = b.Artist_Genre 
       ORDER BY Artist_Name 
       FOR XML PATH('')),1,1,'') Artist_List 
    FROM Artists b 
GROUP BY b.Artist_Genre 
+0

감사합니다. Karl, 예, 충분하고 예 RDBMS입니다. 언급했듯이 모든 아티스트를 장르가 일치하는 동일한 줄에 배치하는 것이 이상적입니다. 더 많은 것을 원한다면 c.Artist_Name [아티스트 3]을 지정하고 계속해야합니까, 아니면 모든 아티스트를 같은 줄에 올릴 수있는 더 정확한 방법이 있습니까? – W4K1NG

+0

같은 줄에 가져 오기 위해 더 많은 셀프 조인을 추가 할 수는 있지만, 완전히 확장되지는 않습니다. 대신 MySQL에서 group_concat과 같이 Genre 및 Artist List 필드를 생성 할 수 있습니다. 무엇 때문에 RDBMS 유형이 무엇인지 물어 보았습니다. 그렇지만 SQL Server, mysql, access 등 어느 것을 의미합니까? –

+0

죄송합니다. SQL 서버. Ohk 대단히 감사합니다. – W4K1NG

관련 문제