zoukankan      html  css  js  c++  java
  • Sql Server:多行合并成一行,并做分组统计

    --创建 test 表 ,插入数据

    CREATE TABLE test(code varchar(50), [values] varchar(10),[count] int)
    INSERT test SELECT '001', 'aa',1
    UNION ALL SELECT '001', 'bb',2
    UNION ALL SELECT '002', 'aaa',4
    UNION ALL SELECT '002', 'bbb',5
    UNION ALL SELECT '002', 'ccc',3;

    --方法一
    --将多行合并成一行,并做分组统计
    SELECT code,
           [values] =
           stuff(b.[values].value('/R[1]', 'nvarchar(max)'),
                 1,
                 1,
                 ''),[count]
      FROM (SELECT  code,sum([count]) as [count]
              FROM test
             GROUP BY code) a
     CROSS apply (
            SELECT [values] =(
                SELECT N',' + [values] FROM test
                  WHERE code = a.code
                             FOR XML PATH(''), ROOT('R'), TYPE
            )
    ) b;

    --方法二

    ---SQL2005中的新解法   使用XML

    SELECT code, data=STUFF((SELECT ','+[values] FROM test t WHERE code=t1.code FOR XML PATH('')), 1, 1, ''),sum([count]) as [count]
    FROM test t1
    GROUP BY code

    --查询结果

    --001    aa,bb    3
    --002    aaa,bbb,ccc    12

    drop table test

  • 相关阅读:
    主机名与域名
    Screen 状态栏配置
    linux 修改时间
    vsftpd2.3.2安装、配置详解
    mysql 二进制日志
    linux下mysql操作的命令
    Apache加载PHP.ini顺序
    页面异步加载javascript文件
    一段实现页面上的图片延时加载的js
    如何在MySql中记录SQL日志
  • 原文地址:https://www.cnblogs.com/yuanxianlai/p/2144657.html
Copyright © 2011-2022 走看看