我有一个看起来像这样的查询
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列将其分组并连接标题,因此结果如下
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,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,2),(2,4),(2,5) INSERT INTO Tags VALUES(1,'Tag1'),(2,'Tag2'),(3,'Tag2'),(4,'Tag5'),(5,'Tag9')
如果获取该数据,则显示的数据JobID不能唯一。您可能在某个Job表的唯一位置有一个表。如果您只想使用显示的这些表,则需要执行以下操作:
JobID
Job
;WITH CTE AS ( SELECT ROW_NUMBER() OVER(PARTITION BY JobID ORDER BY JobID) AS RowNbr, JobsTagMap.* FROM JobsTagMap ) SELECT *, STUFF ( ( SELECT ',' +Title FROM Tags JOIN JobsTagMap ON Tags.TagID=JobsTagMap.TagID WHERE JobsTagMap.JobID=CTE.JobID FOR XML PATH('') ) ,1,1,'') AS Title FROM CTE WHERE CTE.RowNbr=1
这将为您提供以下结果:
1 1 1 Tag1,Tag2 1 2 2 Tag2,Tag5,Tag9
因此,将来总是显示什么 表结构 及其 数据 。那会给你更好的答案