SQLSERVER利用FOR XML PATH实现分组拼接字符串

首先看一下数据结构表

 1 IF(OBJECT_ID('tempdb..#tProduct')IS NOT NULL)
 2     DROP TABLE #tProduct
 3 SELECT * INTO #tProduct FROM(
 4     SELECT 1 AS CatagoryID,1 AS ProductID,'aaa'AS ProductName
 5     UNION 
 6     SELECT 1 AS CatagoryID,2 AS ProductID,'bbb'AS ProductName
 7     UNION 
 8     SELECT 1 AS CatagoryID,3 AS ProductID,'ccc'AS ProductName
 9     UNION 
10     SELECT 2 AS CatagoryID,4 AS ProductID,'xxx'AS ProductName
11     UNION 
12     SELECT 2 AS CatagoryID,5 AS ProductID,'yyy'AS ProductName
13     UNION 
14     SELECT 2 AS CatagoryID,6 AS ProductID,'zzz'AS ProductName
15 )TEMP
16 --SELECT * FROM #tProduct

 

所需的查询结果

CatagoryID

Products

1

aaa,bbb,ccc

2

xxx,yyy,zzz

 

 

 

 

 

查询语句实现

1 SELECT DISTINCT T1.CatagoryID
2 ,Products=REPLACE((SELECT ProductNameAS [data()] FROM #tProduct T2 WHERE T2.CatagoryID=T1.CatagoryID ORDER BY ProductID FOR XML PATH('')),' ',',')
3 FROM #tProduct T1 ORDER BY CatagoryID

 

讲解:请依次执行以下语句查看结果

更多关于FOR XML PATH 请参考msdn。

1、使用FOR XML PATH生成XML文档字符串

1 SELECT CatagoryID,ProductID,ProductName FROM #tProduct
2 FOR XML PATH('Products'),ROOT('root')

 

简化一下

1 SELECT ProductName FROM #tProduct
2 FOR XML PATH('')

 

2、使用data()去掉XML标签元素(这样就使得一列的值构成一个以空格为分隔符的字符串)

1 SELECT ProductName AS [data()] FROM #tProduct
2 FOR XML PATH('')

 

说明:通过使用 data() 作为列名, SELECT 语句将返回 ProductName 的列表。又由于FOR XML PATH(‘’) 指定了一个空字符串作为行元素名,因此不会生成元素

3、见最终的实现语句

转载于:https://www.cnblogs.com/njl041x/p/njl_041x.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值