我有一个表,该表的列用逗号隔开。我想将每个记录的所有数字加在一起。使用 spexecuteSQL ,我已经了解到了这一点,但是它仍然没有评估该字段。我该怎么办?
例如字段是'4,5,5'转置为4 + 5 + 5,但要求值并得到---> 14
declare @com as nvarchar(100)
set @com= 'select replace(class_historyTY,'','',''+'') from #aety1'
exec sp_executesql @com
答案 0 :(得分:2)
如果您有SQL Server 2016,则应该可以进行以下操作:
select name, sum(cast(t.value as int)) from
(select name, cs.Value
from details
cross apply STRING_SPLIT (name, ',') cs) t
group by name
我的桌子的样子:
details
---------------
name
--------------
1,2,3,4
---------------
10,20,30
结果:
name |
1,2,3,4 | 10
10,20,30 | 60
答案 1 :(得分:1)
由于约瑟夫(Josef)提出的交叉申请是正确的做法,因此您想使用sp_executesql
解决方案:
Declare @s nvarchar(max) = 'select '
+ (select replace(class_historyTY,',','+') from #aety1)
exec sp_executesql @s
这里的想法是首先使求和字符串成为4+5+5
,然后将其包装在select语句中,然后将表达式select 4+5+5
传递给sp_executesql
。