• 字符串串联聚合专用解决方案


    1.建表语句

    use tempdb;
    go
    if object_id('dbo.Groups') is not null
     drop table dbo.Groups;
    go

    create table dbo.Groups
    (
     groupid varchar(10) not null,
     memberid int not null,
     string varchar(10) not null,
     val int not null,
     primary key(groupid, memberid)
    );

    insert into dbo.Groups(groupid, memberid, string, val)
    values('a', 3, 'stra1', 6)
    insert into dbo.Groups(groupid, memberid, string, val)
    values('a', 9, 'stra2', 7)
    insert into dbo.Groups(groupid, memberid, string, val)
    values('b', 2, 'strb1', 3)
    insert into dbo.Groups(groupid, memberid, string, val)
    values('b', 4, 'strb2', 7)
    insert into dbo.Groups(groupid, memberid, string, val)
    values('b', 5, 'strb3', 3)
    insert into dbo.Groups(groupid, memberid, string, val)
    values('b', 9, 'strb4', 11)
    insert into dbo.Groups(groupid, memberid, string, val)
    values('c', 3, 'strc1', 8)
    insert into dbo.Groups(groupid, memberid, string, val)
    values('c', 7, 'strc2', 10)
    insert into dbo.Groups(groupid, memberid, string, val)
    values('c', 9, 'strc3', 12)

    dbo.Groups表内容如下:

    a 3 stra1 6
    a 9 stra2 7
    b 2 strb1 3
    b 4 strb2 7
    b 5 strb3 3
    b 9 strb4 11
    c 3 strc1 8
    c 7 strc2 10
    c 9 strc3 12

    我们现在需要按groupid分组,如后聚合连接string的值。语句如下:

    select groupid,
     stuff((
      select ',' + string as [text()]
      from dbo.Groups as G2
      where G2.groupid = G1.groupid
      order by memberid
      for xml path('')), 1, 1, '') as string
    from dbo.Groups as G1
    group by groupid;

    该子查询主要返回当前组内所有字符串的有序路径(ordered path)。由于为Path子句提供了一个空字符串作为输入,所以未产生包装器(wrapper)元素。没有别名的表达式(如,',' + string)或应用别名[text()]的表达式是内联的,它的内容将作为文本节点。使用STUFF函数是为了移除第一个逗号(通过把它替换为空字符串)。

  • 相关阅读:
    域名和IP地址的关系通俗解释
    简单卷、跨区卷、带区卷、镜像卷和 RAID5的区别
    什么是网络端口
    Windows7 64 bit 下解决:检索 COM 类工厂中 CLSID 为 {0002450000000000C000000000000046} 的组件时失败
    SQL函数,收藏先。
    C#中抽象类和接口的区别(转)
    SQL数据库碎片检查DBCC SHOWCONTIG含义
    SQL锁表语句
    50种方法优化SQL Server
    简单工厂模式(转)
  • 原文地址:https://www.cnblogs.com/strugglepcx/p/1820860.html
Copyright © 2020-2023  润新知