有没有一种方法可以替换 SQL Server 中的子字符串,同时保持“了解”我要替换的内容,以便我可以重新插入该内容?
我正在构建一串列名以进行透视,并且这些列名需要在查询中聚合。
例如,我将此列列表作为 nvarchar(max) 字符串:
[A], [B], [C]
我想将此字符串转换为如下所示:
sum([A]) [A], sum([B]) [B], sum([C]) [C],
我刚刚找到了这个stuff
功能,但我还不知道如何实现我想要的。
但我觉得我可以使用它来插入子字符串,而不是使用替换子字符串。
查看 stuff 功能:
STUFF( source_string, start, length, add_string )
如何一次插入多个位置?
我目前的解决方案是这样的:
declare @cols nvarchar(max);
declare @colsAggregate nvarchar(max);
declare @sql nvarchar(max);
select @cols = stuff((
select distinct ',' + quotename(sCode)
from EntityList EL
where EL.bActive = 1 for xml path(''), type).value('.', 'nvarchar(max)'),
1, 1, '');
select @colsAggregate = stuff((
select distinct ', max(' + quotename(sCode) + ') ' + quotename(sCode)
from EntityList EL
where EL.bActive = 1 for xml path(''), type).value('.', 'nvarchar(max)'),
1, 1, '');
您需要先将其作为行获取,然后才能使用 STUFF。
dbfiddle在这里