显示列值匹配的单个表中的数据

时间:2014-04-10 03:44:46

标签: database join match self

我有一个名为'Artists'的表,其中包含Artist_ID,Artist_Name,Artist_Genre列 并一直在试图找出如何列出他们共享相同类型的艺术家。

我想我可能需要一个自我加入,但不能完全达到目的。你能帮忙吗?

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

1 个答案:

答案 0 :(得分: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

编辑:我认为值得向您展示您可以分组并生成艺术家列表。在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