如何对同一列中的值求和,并用“ |”分隔?

时间:2019-12-27 21:31:03

标签: sql sql-server sum

我有一张表,其中一列中的值由|分隔,我需要对这些值求和才能知道总值。示例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

1 个答案:

答案 0 :(得分:2)

SQL Server不支持宏替换,也不支持EVAL()。如果您不想使用Dynamic SQL,并且您的要求是简单的聚合,请考虑将CROSS APPLYstring_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