[SQL Server] 使用FOR XML PATH合併多笔资料

在官方文件关于FOR XML PATH的说明是:可以 XML 格式撷取 SQL 查询的正式结果。
不论是以上的说明,或是文件列举的资料,其实我不太清楚这个功能要如何使用,
直到实务上遇到需要从DB产出资料的需求后,才对FOR XML PATH有初步的了解。

範例

原始报表资料如下:
http://img2.58codes.com/2024/20149099Pi78hyfBpy.png

可以看到有多笔关于user的栏位值都是重複的,
但因为ProjectName栏位值不同的缘故,
资料被分割成多笔,这在资料管理上是没有问题的,
但如果需要将资料以报表等方式呈现时,会偏好让ProjectName合併在一起,
一名人员只需要显示一笔资料即可,这时候FOR XML PATH就派上用场了~

首先,使用for XML Path('')针对ProjectName去做合併,
每一笔ProjectName的资料用逗号分隔:

SELECT T1.UnitName, T1.Account, T1.UserName,(  SELECT ',' + T2.ProjectName   FROM Users T2  WHERE T1.UnitName = T2.UnitName and T1.Account = T2.Account and T1.UserName = T2.UserName  for XML Path('')) AS ProjectName FROM Users T1

可以看到ProjectName被合併了,但有资料重複,
以及ProjectName最前方多出一个逗号的问题:
http://img2.58codes.com/2024/20149099ibpN23esOj.png

使用DISTINCT移除重複资料,并用STUFF把ProjectName最前方的逗号移除:

SELECT DISTINCT T1.UnitName, T1.Account, T1.UserName,STUFF((  SELECT ',' + T2.ProjectName   FROM Users T2  WHERE T1.UnitName = T2.UnitName and T1.Account = T2.Account and T1.UserName = T2.UserName  for XML Path('') ), 1, 1, '') AS ProjectNameFROM Users T1

最终资料如下:
http://img2.58codes.com/2024/20149099nDrPxgo4e4.png

参考资料
使用FOR XML PATH将多笔资料组合成一个字串

关于作者: 网站小编

码农网专注IT技术教程资源分享平台,学习资源下载网站,58码农网包含计算机技术、网站程序源码下载、编程技术论坛、互联网资源下载等产品服务,提供原创、优质、完整内容的专业码农交流分享平台。

热门文章