SQL Server连接GROUP BY

前端之家收集整理的这篇文章主要介绍了SQL Server连接GROUP BY前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个看起来像这样的查询
  1. SELECT J.JobID,T.Title FROM JobsTagMap J
  2. Left Join Tags T
  3. ON J.TagID=T.TagID

返回以下数据集(简化,JobID实际上是UniqueIdentifier)

  1. JobID Title
  2. 1 Tag1
  3. 1 Tag2
  4. 2 Tag2
  5. 2 Tag5
  6. 2 Tag9

现在,我想通过JobID列对其进行分组并连接Title,因此结果如下

  1. JobID Title
  2. 1 Tag1,Tag2
  3. 2 Tag2,Tag5,Tag9

我该怎么做?

解决方法

如果您使用的是sql server 2005.然后你可以这样做:
  1. SELECT
  2. JobsTagMap.JobID,STUFF
  3. (
  4. (
  5. SELECT
  6. ',' +Title
  7. FROM
  8. Tags
  9. WHERE
  10. Tags.TagID=JobsTagMap.TagID
  11. FOR XML PATH('')
  12. ),1,'') AS Title
  13. FROM JobsTagMap

编辑

因为您没有向我们展示表结构和不同表中的数据.这有点难以理解.所以我假设你的表结构看起来像这样:

  1. CREATE TABLE JobsTagMap
  2. (
  3. JobID INT,TagID INT
  4. )
  5.  
  6. CREATE TABLE Tags
  7. (
  8. TagID INT,Title VARCHAR(100)
  9. )

有了这些数据:

  1. INSERT INTO JobsTagMap
  2. VALUES(1,1),(1,2),(2,4),5)
  3.  
  4. INSERT INTO Tags
  5. VALUES(1,'Tag1'),'Tag2'),(3,(4,'Tag5'),(5,'Tag9')

如果您获得的是您显示的数据,则JobID不能是唯一的.您可能将Job表放在其唯一的某个位置.如果您只想使用您正在显示的这些表,那么您需要执行以下操作:

  1. ;WITH CTE
  2. AS
  3. (
  4. SELECT
  5. ROW_NUMBER() OVER(PARTITION BY JobID ORDER BY JobID) AS RowNbr,JobsTagMap.*
  6. FROM
  7. JobsTagMap
  8. )
  9. SELECT
  10. *,' +Title
  11. FROM
  12. Tags
  13. JOIN JobsTagMap
  14. ON Tags.TagID=JobsTagMap.TagID
  15. WHERE
  16. JobsTagMap.JobID=CTE.JobID
  17. FOR XML PATH('')
  18. ),'') AS Title
  19. FROM
  20. CTE
  21. WHERE
  22. CTE.RowNbr=1

这会得到这个结果:

  1. 1 1 1 Tag1,Tag2
  2. 1 2 2 Tag2,Tag9

所以将来总会显示什么表结构和它的数据.这会给你更好的答案

猜你在找的MsSQL相关文章