代码之家  ›  专栏  ›  技术社区  ›  A G

SQL Server-列的和逗号分隔值

  •  1
  • A G  · 技术社区  · 15 年前

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

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

    还有其他想法吗?

    2 回复  |  直到 14 年前
        1
  •  4
  •   Adriaan Stander    15 年前

    使用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
    
        2
  •  1
  •   Paul Creasey    15 年前

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

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

    不能在这个比赛中试一试。