欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2023-12-11 08:25:16
复制代码 代码如下:--创建 test 表 ,插入数据create table test(code varchar(50), [values] varchar(10),[c...
复制代码 代码如下:

--创建 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