-1

数据库结构是这样的: 在此处输入图像描述

标签表如下所示:

 ID      NAME
 ----------------------
 1       Blue
 2       Green
 3       Small
 4       Large
 5       Red

它们将通过 ProductTag 表与产品相关。

我要返回的是与产品相关的标签的每一个组合,如下所示:

 IDs      TAGS
 ----------------------
 1       Blue
 2       Green
 1,3     Small, Blue
 2,3     Small, Green
 1,4     Large, Blue
 2,4     Large, Green
 3       Small
 4       Large
 5       Red

(这些组合中的每一个都有产品)

我认为 SQL 2005 有一些调用WITH CUBE来帮助完成这样的事情,但不幸的是这在 SQL 2008 中似乎不起作用。有谁知道如何完成这个?

4

1 回答 1

2

像这样的东西必须帮助你。

;WITH TagsCTE
AS
(
   SELECT P.ProductID, T.ID,T.Name
   FROM ProductTags P
     JOIN Tag T
       ON P.TagID = T.ID
)
SELECT
   STUFF((SELECT ',' + CAST(ID as varchar) FROM TagsCTE TC WHERE TC.ProductID = TT.ProductID FOR XML PATH('')),1,1,'') IDs, 
   STUFF((SELECT ',' + Name FROM TagsCTE TC WHERE TC.ProductID = TT.ProductID FOR XML PATH('')),1,1,'') Tags
FROM TagsCTE TT
GROUP BY ProductID

SQL 小提琴演示

于 2013-09-18T20:21:53.437 回答