数据库中有一列包含逗号分隔值,如:0.00,12.45,14.33等等。
我需要在存储过程中对此进行总结。我能想到的一种方法是使用函数将其拆分并转换为表格,然后求它。
还有其他想法吗?
答案 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
不能试试这个补偿。