我有一个看起来像这样的查询
- 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
所以将来总会显示什么表结构和它的数据.这会给你更好的答案