SQL Server - 将逗号分隔的值与列相加

时间:2010-04-11 15:31:18

标签: sql sql-server

数据库中有一列包含逗号分隔值,如:0.00,12.45,14.33等等。

我需要在存储过程中对此进行总结。我能想到的一种方法是使用函数将其拆分并转换为表格,然后求它。

还有其他想法吗?

2 个答案:

答案 0 :(得分:4)

使用Sql Server 2005+ CTE,您可以创建递归选择,例如

DECLARE @Table TABLE(
        ID INT,
        Vals VARCHAR(100)
)

INSERT INTO @Table SELECT 1, '0.00,12.45,14.33'
INSERT INTO @Table SELECT 2, '1,2,3,4'

;WITH ValList AS(
        SELECT  ID,
                CAST(LEFT(Vals,PATINDEX('%,%', Vals) - 1) AS FLOAT) Val,
                RIGHT(Vals,LEN(Vals) - PATINDEX('%,%', Vals)) Remainder
        FROM    @Table
        UNION ALL
        SELECT  ID,
                CAST(LEFT(Remainder,CASE WHEN PATINDEX('%,%', Remainder) = 0 THEN LEN(Remainder) ELSE PATINDEX('%,%', Remainder) - 1 END) AS FLOAT) Val,
                RIGHT(Remainder,CASE WHEN PATINDEX('%,%', Remainder) = 0 THEN 0 ELSE LEN(Remainder) - PATINDEX('%,%', Remainder) END) Remainder
        FROM    ValList
        WHERE   LEN(Remainder) > 0

)
SELECT  ID,
        SUM(Val)
FROM    ValList
GROUP BY ID

<强>输出

ID          Total
----------- ----------------------
1           26.78
2           10

答案 1 :(得分:1)

在一个函数中你可以尝试这样的东西,完全不确定它是否会起作用!

CREATE FUNCTION ufn_sum_csv(@string varchar(100))
RETURNS @result int
AS BEGIN
EXEC 'SELECT @result = ' + REPLACE(@string,',','+')
RETURN

不能试试这个补偿。