SQLServer字符串聚合拼接办法
数据范例如下:
要得到的结果⽬标,获取type相同的所有names拼接在⼀起的字符串:
SqlServer并没有⼀个直接拼接字符串的函数,下⾯所提到的⽅法,只是⽇常的开发中⾃⼰个⼈⽤到的⼀些思路,仅供参考!
declare@tempTable table([Type]int,[Name]nvarchar(100))
创建表变量,字段为你需要返回的各列的值
insert@tempTable
select[type],MAX([name]) name
from test
group by[type]
插⼊初始的聚合数据
updateTag:
update@tempTable
set[name]+= (','+ a.[name])
from test a,@tempTable b
where a.[Type]= B.[Type]
and CHARINDEX(a.[name],b.[name]) =0
if@@ROWCOUNT>0
sql server拼接字符串函数begin
GOTO updateTag
end
select*from@tempTable
循环插⼊其他满⾜条件的聚合数据,这种⽅案适合包含聚合条件⽐较复杂的情况,⽐如需要查询聚合多列拼接字符串结果,其中还涉及到⼀些列的复杂运算,但是劣势也很明显,如果分组聚合的项⽐较多时,会⽐较耗时,因为有⼀个循环效率不是很⾼的insert,但是对于⼏⼗或者⼏百次的循环来说还是没太⼤的问题的。
其实⽹上搜了⼀圈还是有不错的⽅法的,⽐如STUFF函数,我们可以这么写得到上⾯的结果:
SELECT[TYPE], STUFF(
( SELECT','+[Name]
FROM test b
WHERE b.Type = a.Type
FOR XML PATH('')),1 ,1, '') [Names]
from Test a
group by[TYPE]
⾄于这个函数⽤法,这⾥就不多解释了,希望以上两种⽅案对您有⼀点帮助或者启⽰!
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论