SQL Server将相同id的另一列的多行内容拼接成一行

比如表中有两列数据 :

id name

1 a

1 b

1 c

2 d

2 e

变成如下格式:

id name

1 a,b,c

2 d,e

数据:

if object_id(#表)is not null drop table #表
select did,name, from #表 order by did
drop table #表
select 66 nid,‘aaa‘ name,1 did into #表 union all
select 67,‘bbb‘,1 union all
select 80,‘ccc‘,1 union all
select 69,‘ddd‘,2 union all
select 70,‘eee‘,2

实现代码如下:

--递归计算多行合并成一个字段
--方法1
;with x (did, cnt, list, nid, le)
as (
select did,count(1)over(partition by did),cast(name as varchar(100))
,nid,1 from #表
union all
select x.did,x.cnt,cast(x.list+‘,‘+a.name as varchar(100)),a.nid,x.le+1 from #表 a,x
where a.did=x.did and a.nid>x.nid
)
select * from  x
where le=cnt

--方法2 中间表效率不好
if object_id(#表)is not null drop table #结果

select did,cast(name as varchar(2000)) name
into #结果
from #表
order by did

declare @dept int =‘‘,@name varchar(max) =‘‘
update a
set @name= case when @dept=did then @name+‘,‘+name
            else name
            end,
    @dept=did,
    name=@name
from #结果 a
select did,max(name) from #结果
group by did

--方法3 使用xml方便,简单
--select ‘,‘ + name from #表   for xml path(‘‘)
select did, name = (stuff((select ‘,‘ + name from #表 where did =
a.did for xml path(‘‘)),1,1,‘‘)) from #表 a group by did  

结果:

时间: 2024-10-15 19:28:24

SQL Server将相同id的另一列的多行内容拼接成一行的相关文章

关于SQL Server将一列的多行内容拼接成一行的问题讨论(转载)

说明:本文仅供分享,版权属于原作者. 昨天遇到一个SQL Server的问题:需要写一个储存过程来处理几个表中的数据,最后问题出在我想将一个表的一个列的多行内容拼接成一行 比如表中有两列数据 : ep_classes  ep_name AAA         企业1 AAA         企业2 AAA         企业3 BBB         企业4 BBB         企业5 我想把这个表变成如下格式: ep_classes      ep_name AAA           

关于SQL Server将一列的多行内容拼接成一行的问题讨论

昨天遇到一个SQL Server的问题:需要写一个储存过程来处理几个表中的数据,最后问题出在我想将一个表的一个列的多行内容拼接成一行 比如表中有两列数据 : ep_classes  ep_name AAA         企业1 AAA         企业2 AAA         企业3 BBB         企业4 BBB         企业5 我想把这个表变成如下格式: ep_classes      ep_name AAA             企业1,企业2,企业3 BBB  

SQL Server将一列的多行内容拼接成一行的实现方法

SQL Server将一列的多行内容拼接成一行的实现方法 投稿:mdxy-dxy 这篇文章主要介绍了SQL Server将一列的多行内容拼接成一行的实现方法,需要的朋友可以参考下 下面大家先看下示例代码: 示例 昨天遇到一个SQL Server的问题:需要写一个储存过程来处理几个表中的数据,最后问题出在我想将一个表的一个列的多行内容拼接成一行,比如表中有两列数据 : 类别 名称 AAA 企业1 AAA 企业2 AAA 企业3 BBB 企业4 BBB 企业5 我想把这个表变成如下格式: 类别 名称

SQL Server将一列的多行内容拼接成一行

昨天遇到一个SQL Server的问题:需要写一个储存过程来处理几个表中的数据,最后问题出在我想将一个表的一个列的多行内容拼接成一行 比如表中有两列数据 : ep_classes  ep_name AAA         企业1 AAA         企业2 AAA         企业3 BBB         企业4 BBB         企业5 我想把这个表变成如下格式: ep_classes      ep_name AAA             企业1,企业2,企业3 BBB  

关于SQL Server将一列的多行内容拼接成一行,合并显示在另外表中

select '['+title_a+','+title_b +']' from A   for xml path('') SELECT *, (select '['+title_a+','+title_b +']' from A where A.t_id=B.t_id   for xml path(''))  FROM B

如何将sql server 数据库表中的某一列的某一字符替换成需要的字符

实例:select   replace(chexing, '微型车', '0001')   from   T_MODEL chexing:要替换的字段名称. 微型车:要被替换的内容. 0001:替换后的内容. 注:replace适用于非:text,ntext字段!!

sql server:删除表数据,标识列Id从1开始

在sql server数据库上创建有自增列的数据表,每次删除表的数据后,自增主键都无法自动从1开始计数.用下面三个单词就可以轻松搞定: TRUNCATE  TABLE  TbName   --TbName是表名

SQL Server 2005中的分区表(三):将普通表转换成分区表(转)

在设计数据库时,经常没有考虑到表分区的问题,往往在数据表承重的负担越来越重时,才会考虑到分区方式,这时,就涉及到如何将普通表转换成分区表的问题了. 那么,如何将一个普通表转换成一个分区表 呢?说到底,只要将该表创建一个聚集索引,并在聚集索引上使用分区方案即可. 不过,这回说起来简单,做起来就复杂了一点.还是接着上面的例子,我们先使用以下SQL语句将原有的Sale表删除. --删除原来的数据表 drop table Sale 然后使用以下SQL语句创建一个新的普通表,并在这个表里插入一些数据. -

SQL Server 2005中的分区表(六):将已分区表转换成普通表

在前面,我们介绍过怎么样直接创建一个分区表,也介绍过怎么将一个普通表转换成一个分区表.那么,这两种方式创建的表有什么区别呢?现在,我又最新地创建了两个表: 第一个表名为Sale,这个表使用的是<SQL Server 2005中的分区表(一):什么是分区表?为什么要用分区表?如何创建分区表?>中的方法创建的,在创建完之后,还为该表添加了一个主键. 第二个表名Sale1,这个表使用的是<SQL Server 2005中的分区表(三):将普通表转换成分区表>中的方法创建的,也就是先创建了