我有一张表,其中一列中的值由|分隔,我需要对这些值求和才能知道总值。示例5 | 4 | 3 =12。我认为如果替换|对于+符号,应该可以使用。但这确实有效。
这是我创建表的代码以及我用来求和值的代码。
CREATE TABLE [dbo].[test_table](
[totals] [varchar](255) NULL
) ON [PRIMARY]
GO
--*******************
INSERT INTO [dbo].[test_table]
([totals])
-- VALUES
(
select ('1|5|13')
union
select ('1|5|13')
union
select ('0|0|2')
union
select ('1|1|7')
union
select ('1|1|13')
union
select ('1|1|13')
union
select ('0|0|3')
union
select ('0|0|1')
union
select ('0|0|4')
union
select ('1|1|9'))
GO
select
tot
--sum(tot) as total
--CONVERT(numeric, tot)
from
(
select totals,
replace(totals,'|','+') as tot
from test_table
) qry
答案 0 :(得分:2)
SQL Server不支持宏替换,也不支持EVAL()
。如果您不想使用Dynamic SQL,并且您的要求是简单的聚合,请考虑将CROSS APPLY
与string_split()
示例
Select *
From [test_table] A
Cross Apply (
Select SumTotal = sum(try_convert(int,value))
from string_split(Totals,'|') B1
) B
返回
totals SumTotal
0|0|1 1
0|0|2 2
0|0|3 3
0|0|4 4
1|1|13 15
1|1|7 9
1|1|9 11
1|5|13 19