有时候我们需要把多行数据,合并成一行显示,并用逗号或者其他方式分隔显示,这时候我们可以使用FOR XML PATH的方式,来实现需求。测试数据如下:
--测试数据
if not object_id(N'Tempdb..#T') is null
drop table #T
Go
Create table #T([Province] nvarchar(22),[City] nvarchar(23))
Insert #T
select N'河北',N'石家庄' union all
select N'河北',N'唐山' union all
select N'河北',N'秦皇岛' union all
select N'山西',N'太原' union all
select N'山西',N'大同'
Go
--测试数据结束
我们想按照省份显示该省所有的市区,并且每个省份只显示一条数据,写法如下:
SELECT [Province] ,
STUFF(( SELECT ',' + #T.[City]
FROM #T
WHERE [Province] = a.[Province]
FOR
XML PATH('')
), 1, 1, '') AS value
FROM #T a
GROUP BY a.[Province]
结果如下:
这样我们就通过FOR XML PATH的方式实现了我们的需求,当然FOR XML PATH还有其他很多用法,而且合并显示的方法也有其他写法,后续慢慢补充。