开发者论坛

 找回密码
 注册 (请使用非IE浏览器)
查看: 14289|回复: 0

Sql Server:多行合并成一行,并做分组统计的两个方法

[复制链接]

0

精华

10

贡献

19

赞扬

帖子
33
软币
151
在线时间
11 小时
注册时间
2016-9-8

武林秘籍

发表于 2016-9-11 20:18:49 | 显示全部楼层 |阅读模式
--创建 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)'), , ,  ''),[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

评分

参与人数 1赞扬 +1 收起 理由
wangzisa + 1

查看全部评分

回复

使用道具 举报

Archiver|手机版|小黑屋|开发者网 ( 苏ICP备08004430号-2 )
版权所有:南京韵文教育信息咨询有限公司

GMT+8, 2024-3-29 21:05

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表