两列数据的所有可能组合

Ale*_*bie 5 sql t-sql sql-server permutation sql-server-2008

我有两个列视图

Product Id   Tag
----------------------
1            Leather
1            Watch
2            Red
2            Necklace
2            Pearl
Run Code Online (Sandbox Code Playgroud)

我正在尝试为产品获取所有可能的标签组合:

1          Leather
1          Leather,Watch
2          Pearl
2          Pearl,Necklace
2          Pearl Necklace,Red
2          Necklace
2          Necklace, Red
2          Red
Run Code Online (Sandbox Code Playgroud)

我找到并窃取了一些SQL,它给了我所有但不是小版本的完整列表,下面是它.

任何想法,它都开始让我头疼.一个虚拟品脱的最佳答案.

SELECT ProductId, 
       (SELECT CAST(Tag + ', ' AS VARCHAR(MAX)) 
          FROM ProductByTagView 
         WHERE Product.ProductId = ProductByTagView.ProductId
      order by tag
       FOR XML PATH ('')) AS Tags
FROM Product
Run Code Online (Sandbox Code Playgroud)

Sql*_*CID 0

像这样的东西?:

从aView a中选择a.ProductID、a.tag+','+b.tag
交叉连接 aView b
其中 a.tag != b.tag
联盟
从视图中选择 ProductID、标签