Sql 如何对同一列中的值求和,以'|';?

Sql 如何对同一列中的值求和,以'|';?,sql,sql-server,sum,Sql,Sql Server,Sum,我有一个表,在一列中,它的值用|分隔,我需要求和这些值,才能知道总值。例5 | 4 | 3=12。我想如果我用|代替a+符号,那应该行得通。但它不起作用 下面是我创建表的代码,以及我用来求和的值 CREATE TABLE [dbo].[test_table]( [totals] [varchar](255) NULL ) ON [PRIMARY] GO --******************* INSERT INTO [dbo].[test_table] ([to

我有一个表,在一列中,它的值用|分隔,我需要求和这些值,才能知道总值。例5 | 4 | 3=12。我想如果我用|代替a+符号,那应该行得通。但它不起作用

下面是我创建表的代码,以及我用来求和的值

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

SQL Server不支持宏替换,如果具有
EVAL()
,也不支持宏替换。如果您不想使用动态SQL,并且您的需求是一个简单的聚合,请考虑<代码>交叉应用与<代码> StrugSPLITE()/<代码>

示例

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

SQL Server不支持宏替换,如果具有
EVAL()
,也不支持宏替换。如果您不想使用动态SQL,并且您的需求是一个简单的聚合,请考虑<代码>交叉应用与<代码> StrugSPLITE()/<代码>

示例

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

SQL Server版本?请检查此链接,理想情况下,您应该在此处修复您的设计。这是否回答了您的问题?SQL Server版本?请检查此链接,理想情况下,您应该在此处修复您的设计。这是否回答了您的问题@i人们总是乐于帮助。@i人们总是乐于帮助。