sqlserver 分组 拼接其他字段

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sqlserver 分组 拼接其他字段相关的知识,希望对你有一定的参考价值。

人员ID 人员名称 人员的儿女 儿女岁数
----------------------------------------------------------
1 吴亮 吴1 3岁
1 吴亮 吴2 5岁
1 吴亮 吴3 9岁
4 麦大伟 麦1 3岁
4 麦大伟 麦2 5岁
6 张思 张1 1岁

查询SQL后 想要得到这样的数据
人员ID 人员 人员儿女 儿女岁数
---------------------------------------------------------
1 吴亮 吴1,吴2,吴3, 3岁,5岁,9岁,
4 麦大伟 麦1,麦2, 3岁,5岁,
6 张思 张1 1岁,

******************
我知道oracle 可以直接用 wm_concat () 这个函数,但 sqlserver没有这东西,怎么写呢
求指教

参考技术A SQL2005或以上才可以:
Declare @t Table
(
ID int,
FName varchar(20),
CName varchar(20),
CAge varchar(20)
)
Insert Into @t
select 1,'吴亮','吴1','3岁' Union
select 1,'吴亮','吴2','5岁' Union
select 1,'吴亮','吴3','9岁' Union
select 4,'麦大伟','麦1','3岁' Union
select 4,'麦大伟','麦2','5岁' Union
select 6,'张思','张1','3岁'
下面是合并:
Select ID,FName,CName=Stuff((Select ','+CName From @t Where ID=T.ID For xml path('')),1,1,''),
CAge=Stuff((Select ','+CAge From @t Where ID=T.ID For xml path('')),1,1,'')
From @t T Group by id,FName追问

关联多表的时候 会有问题吗

就是说 @t 是很多表关联所得的

本回答被提问者采纳
参考技术B 都需要指定非聚合的列为组,group by ,用left join加上isnull
select a.name,b.name,c.name,d,name,sum(isnull(d.money,0))as 钱钱
from a as a
left jion b on a.id=b.id
left jion c on a.id=c.id
left jion d on a.id=d.id
group by a.name,b.name,c.name,d,name

追问

刚才没有 写完...
你再看看 问题的补充

sqlserver 同字段值拼接 列转行

--******************************************************************************************* 
表结构,数据如下:  
id    value  
----- ------  
1    aa  
1    bb  
2    aaa  
2    bbb  
2    ccc  
  
需要得到结果:  
id    values  
------ -----------  
1      aa,bb  
2      aaa,bbb,ccc  
即:group by id, 求 value 的和(字符串相加)  

 

create table tb(id int, value varchar(10))  
insert into tb values(1, \'aa\')  
insert into tb values(1, \'bb\')  
insert into tb values(2, \'aaa\')  
insert into tb values(2, \'bbb\')  
insert into tb values(2, \'ccc\')  
go  
  
select id, [values]=stuff((select \',\'+[value] from tb t where id=tb.id for xml path(\'\')), 1, 1, \'\')  
from tb  
group by id  
  
/*  
id          values  
----------- --------------------  
1          aa,bb  
2          aaa,bbb,ccc  
  
(2 row(s) affected)  
  
*/  
  
drop table tb

 

 

最全介绍参考:https://www.cnblogs.com/yasuo2/p/6433697.html

以上是关于sqlserver 分组 拼接其他字段的主要内容,如果未能解决你的问题,请参考以下文章

sql分组拼接字段

sqlserver如何把取出的数据拼接起来

sqlserver group by 非聚集多字段组合索引性能慢的问题

SQL Server 动态行转列(参数化表名分组列行转列字段字段值)

sqlserver的varchar类型拼接的问题

sqlserver 同字段值拼接 列转行