生成透视列之for xml path

临时表#t原始数据:

实现如下格式,即根据Province分组,把每个组对应的City列以某种格式展示:

实现方法:

select t.Province,(
select city+',' From #t where t.Province=province for xml path('')
) as 城市群 from #t t
group by t.Province

注:

如果要去掉每组城市群后面的逗号,有几种方法可以参考:

--方法一:通过left去掉列最后一个字符
select province,left(citys,len(citys)-1) citys from(

select province,
(
select city+',' from #t where province=t.Province for xml path('')
) citys from #t t
group by province

)b

--方法二:通过sutff去掉列第一个字符
select province,stuff(citys,1,1,'') citys from(

select province,
(
select ';'+city from #t where province=t.Province for xml path('')
) citys from #t t
group by province

)b

--方法三:通过stuff去掉列最后一个字符
select province,stuff(citys,LEN(citys),1,'') citys from(

select province,
(
select city+';' from #t where province=t.Province for xml path('')
) citys from #t t
group by province

)b

再废话一下:

Select stuff('abcdef',2,3,'ghijk')   结果:aghijkef 
stuff的功能:删除指定长度的字符串并在指定的起始点插入另一组字符 
STUFF(character_expression ,start ,length ,character_expression) 
character_expression :操作的字符,start:删除和插入的起始点,length:删除的长度,character_expression :要插入的字符 

原文地址:https://www.cnblogs.com/eboss/p/3914841.html