我有一个看起来像这样的查询
SELECT J.JobID,T.Title FROM JobsTagMap J Left Join Tags T ON J.TagID=T.TagID
返回以下数据集(简化,JobID实际上是UniqueIdentifier)
JobID Title 1 Tag1 1 Tag2 2 Tag2 2 Tag5 2 Tag9
现在,我想通过JobID列对其进行分组并连接Title,因此结果如下
JobID Title 1 Tag1,Tag2 2 Tag2,Tag5,Tag9
我该怎么做?
解决方法
如果您使用的是sql server 2005.然后你可以这样做:
SELECT JobsTagMap.JobID,STUFF ( ( SELECT ',' +Title FROM Tags WHERE Tags.TagID=JobsTagMap.TagID FOR XML PATH('') ),1,'') AS Title FROM JobsTagMap
编辑
因为您没有向我们展示表结构和不同表中的数据.这有点难以理解.所以我假设你的表结构看起来像这样:
CREATE TABLE JobsTagMap ( JobID INT,TagID INT ) CREATE TABLE Tags ( TagID INT,Title VARCHAR(100) )
有了这些数据:
INSERT INTO JobsTagMap VALUES(1,1),(1,2),(2,4),5) INSERT INTO Tags VALUES(1,'Tag1'),'Tag2'),(3,(4,'Tag5'),(5,'Tag9')
如果您获得的是您显示的数据,则JobID不能是唯一的.您可能将Job表放在其唯一的某个位置.如果您只想使用您正在显示的这些表,那么您需要执行以下操作:
;WITH CTE AS ( SELECT ROW_NUMBER() OVER(PARTITION BY JobID ORDER BY JobID) AS RowNbr,JobsTagMap.* FROM JobsTagMap ) SELECT *,' +Title FROM Tags JOIN JobsTagMap ON Tags.TagID=JobsTagMap.TagID WHERE JobsTagMap.JobID=CTE.JobID FOR XML PATH('') ),'') AS Title FROM CTE WHERE CTE.RowNbr=1
这会得到这个结果:
1 1 1 Tag1,Tag2 1 2 2 Tag2,Tag9
所以将来总会显示什么表结构和它的数据.这会给你更好的答案