sql中经常需要把多个行数据合成一行下面是利用 FOR XML PATH来实现的简单介绍。
1,把图一的转换为图二:
1 SELECT articleID, 2 (SELECT CONVERT(varchar(10),tagID)+',' FROM articleTag_tb 3 FOR XML PATH('')) AS tagID FROM articleTag_tb GROUP BY articleID
以上是一个表的,下面看看多表关联的做法,其实是一样的只是连接表查询
这是一个文章对应多个标签的例子三张表:
CREATE TABLE [dbo].[article_tb]( [articleID] [int] NULL, [articleName] [nvarchar](50) NULL ) CREATE TABLE [dbo].[articleTag_tb]( [articleID] [int] NULL, [tagID] [int] NULL ) CREATE TABLE [dbo].[tag_tb]( [tagID] [int] NULL, [tagName] [nvarchar](50) NULL )
实现sql语句:
SELECT articleName, (SELECT tagName+','FROM (SELECT A.articleName,t.tagName FROM article_tb A LEFT JOIN articleTag_tb AT ON AT.articleID=A.articleID LEFT JOIN tag_tb T ON AT.tagID=T.tagID) temp WHERE temp.articleName=TT.articleName FOR XML PATH('')) AS tagName FROM article_tb TT
解释:
先把三个表做连接查询查找需要的字段,再用FOR XML PATH 自连接拼接字符串
三表连接查询结果为: 使用FOR XML PATH拼接后结果: