Sql 如何将一个concat列与同一列中的多个值相加

Sql 如何将一个concat列与同一列中的多个值相加,sql,sql-server,dynamic,sum,Sql,Sql Server,Dynamic,Sum,我有一个简单的列,其值如下: __ID__|_________COLUM 1____ reg 1 | 12.4 | reg 2 | 12.9 , 14.4 , 12.94 | reg 3 | 12.1 , 14.2 , 12.2 | reg 4 | 12.3 , 12.98 | reg 5 | 12.5 , 14.0 | reg 6 | 12.3 , 14 , 12.9 | __标识栏1____ 条例1 | 12.4| 条例2

我有一个简单的列,其值如下:

__ID__|_________COLUM 1____ reg 1 | 12.4 | reg 2 | 12.9 , 14.4 , 12.94 | reg 3 | 12.1 , 14.2 , 12.2 | reg 4 | 12.3 , 12.98 | reg 5 | 12.5 , 14.0 | reg 6 | 12.3 , 14 , 12.9 | __标识栏1____ 条例1 | 12.4| 条例2 | 12.9、14.4、12.94 | 条例3 | 12.1、14.2、12.2| 条例4 | 12.3、12.98| 条例5 | 12.5,14.0| 条例6 | 12.3、14、12.9| 我想要的是按id(垂直方向)对值求和

我正在考虑用动态sql替换(+)的逗号(,),但我不知道如何使总和工作

我想要的结果是这样的

__ID__|_________COLUM 1____ reg 1 | 12.4 | reg 2 | 40.24 | reg 3 | 38.5 | reg 4 | 25.28 | reg 5 | ........... | reg 6 | ................... | __标识栏1____ 条例1 | 12.4| 条例2 | 40.24| 条例3 | 38.5| 条例4 | 25.28| 条例5| 条例6|
透视表不是这样,因为有超过1000000个regs和while循环。我不知道,也许还有其他方法。

您需要为此创建一个拆分函数

分割函数定义 查询 结果
CREATE FUNCTION [dbo].[split]
    (
      @delimited NVARCHAR(MAX),
      @delimiter NVARCHAR(100)
    ) 
 RETURNS @t TABLE (id INT IDENTITY(1,1), val NVARCHAR(MAX))
AS
BEGIN
  DECLARE @xml XML
  SET @xml = N'<t>' + REPLACE(@delimited,@delimiter,'</t><t>') + '</t>'

  INSERT INTO @t(val)
  SELECT  r.value('.','varchar(MAX)') as item
  FROM  @xml.nodes('/t') as records(r)
  RETURN
END
DECLARE @TABLE TABLE (ID VARCHAR(10), Column1 VARCHAR(1000))

INSERT INTO @TABLE (ID,Column1)  VALUES 
('reg 1'  ,'12.4'               ),
('reg 2'  ,'12.9 , 14.4 , 12.94'),
('reg 3'  ,'12.1 , 14.2 , 12.2' ),
('reg 4'  ,'12.3 , 12.98'       ),
('reg 5'  ,'12.5 , 14.0'        ),
('reg 6'  ,'12.3 , 14   , 12.9' )
SELECT t.ID
      ,SUM(CAST(l.Vals AS DECIMAL(10,2))) Total
FROM @TABLE t
        CROSS APPLY (SELECT val FROM [dbo].[split](t.Column1, ',')) l(Vals)
GROUP BY t.ID
╔═══════╦═══════╗
║  ID   ║ Total ║
╠═══════╬═══════╣
║ reg 1 ║ 12.40 ║
║ reg 2 ║ 40.24 ║
║ reg 3 ║ 38.50 ║
║ reg 4 ║ 25.28 ║
║ reg 5 ║ 26.50 ║
║ reg 6 ║ 39.20 ║
╚═══════╩═══════╝