zoukankan      html  css  js  c++  java
  • [转]SQL 2005溢用之:合并列值

    原文引用自:zjcxc(邹建)的Blog - SQL Server      文章地址->(Click)

    问题描述:

    无论是在sql 2000 还是在 sql 2005 中,都没有提供字符串的聚合函数, 所以, 当我们在处理下列要求时,会比较麻烦:

     

    有表tb, 如下:

    id    value

    ----- ------

    1     aa

    1     bb

    2     aaa

    2     bbb

    2     ccc

     

    需要得到结果:

    id     values

    ------ -----------

    1      aa,bb

    2      aaa,bbb,ccc

     

    即, group by id, value 的和(字符串相加)

     

    1. 旧的解决方法

    -- 1. 创建处理函数

    CREATE FUNCTION dbo.f_str(@id int)

    RETURNS varchar(8000)

    AS

    BEGIN

        DECLARE @r varchar(8000)

        SET @r = ''

        SELECT @r = @r + ',' + value

        FROM tb

        WHERE id=@id

        RETURN STUFF(@r, 1, 1, '')

    END

    GO

     

    -- 调用函数

    SELECt id, values=dbo.f_str(id)

    FROM tb

    GROUP BY id

     

    -- 2. 新的解决方法

    -- 示例数据

    DECLARE @t TABLE(id int, value varchar(10))

    INSERT @t SELECT 1, 'aa'

    UNION ALL SELECT 1, 'bb'

    UNION ALL SELECT 2, 'aaa'

    UNION ALL SELECT 2, 'bbb'

    UNION ALL SELECT 2, 'ccc'

     

    -- 查询处理

    SELECT *

    FROM(

        SELECT DISTINCT

            id

        FROM @t

    )A

    OUTER APPLY(

        SELECT

            [values]= STUFF(REPLACE(REPLACE(

                (

                    SELECT value FROM @t N

                    WHERE id = A.id

                    FOR XML AUTO

                ), '<N value="', ','), '"/>', ''), 1, 1, '')

    )N

     

    /*--结果

    id          values

    ----------- ----------------

    1           aa,bb

    2           aaa,bbb,ccc

     

    (2 行受影响)

    --*/


    : 合并与分拆的CLR sql2005的示例中有:
    在安装sql 2005的示例后,默认安装目录为 drive:\Program Files\Microsoft SQL Server\90\Samples\Engine\Programmability\CLR\StringUtilities

    更多动态请关注微信公众号 dbagrant
  • 相关阅读:
    上传图片到FTP的实例
    关于浏览器兼容问题:获取div的值
    多张表数据导入到execl中
    把泛型转换成dataTable
    关于游标
    Excel 公式 两个时间比大小
    SQL 执行顺序
    VBA实现随意输入组合码,查询唯一标识码
    IIS7 503错误 Service Unavailable
    汇总文件数据 VBA
  • 原文地址:https://www.cnblogs.com/laoyumi/p/1568527.html
Copyright © 2011-2022 走看看