zoukankan      html  css  js  c++  java
  • SQL Server2000和2005中合并列值

    有表tb, 如下:
    id    value
    —– ——
    1     aa
    1     bb
    2     aaa
    2     bbb
    2     ccc

    需要得到结果:
    id     values
    —— ———–
    1      aa,bb
    2      aaa,bbb,ccc

    在SQL Server2000中我们处理的方式一般都是用自定义函数去处理:
    举例如下:

    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

    在SQL Server2005中,这种统计有了一种新的方法,直接使用语句调用sql2005的函数实现:
    举例如下:

    – 示例数据
    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 行受影响)
    –*/

    最近从CSDN上又发现了一种方法!
    declare @a varchar(100)
    select @a=coalesce(@a+’/',”)+PNAME from HPINF where perid like’207%’
    select @a

  • 相关阅读:
    ACwing 199 约数之和
    Acwing 222 青蛙的约会
    Acwing 220 最大公约数
    Acwing 200 Hankson的趣味题
    牛客 同余方程
    Acwing 198 反素数
    2020牛客多校 第六场B
    牛客 计数器
    Java基础-快捷键以及DOS命令
    A1111 Online Map (30分)(最短路径、Dijkstra+DFS)
  • 原文地址:https://www.cnblogs.com/Gaojier/p/2783556.html
Copyright © 2011-2022 走看看