热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

sql里怎么把一列的值合并成一个字符串???

如果存在如下数据表:ABpro1qqqqqpro1wwwwwpro1
如果存在如下数据表: 
A               B               
pro1         qqqqq 
pro1         wwwww 
pro1         eeeee 
pro2         rrrrr 
pro2         ttttt 
pro1         yyyyy 
pro1         uuuuu 

要实现如下输出: 
A               B 
pro1         qqqqq,wwwww,eeeee,yyyyy,uuuuu 
pro2         rrrrr,ttttt

7 个解决方案

#1


--> 测试数据: #T
if object_id('tempdb.dbo.#T') is not null drop table #T
create table #T (A varchar(4),B varchar(5))
insert into #T
select 'pro1','qqqqq' union all
select 'pro1','wwwww' union all
select 'pro1','eeeee' union all
select 'pro2','rrrrr' union all
select 'pro2','ttttt' union all
select 'pro1','yyyyy' union all
select 'pro1','uuuuu'

--> 2000
declare @i int, @max int, @sql varchar(max)
select top 1 @i=1, @max=count(*) from #T group by A order by 2 desc
while @i<=@max
begin
set @sql=isnull(@sql+'+max(case i when '+ltrim(@i)+' then '',''+','max(case i when '+ltrim(@i)+' then ')+'B else '''' end)'
set @i=@i+1
end
exec ('select A, B='+@sql+' from (select *,i=(select count(1) from #T where A=a.A and B<=a.B) from #T a) t group by A')
/*
A    B
---- -----------------------------
pro1 eeeee,qqqqq,uuuuu,wwwww,yyyyy -->如要按顺序,请生成唯一的标识列:where A=a.A and ID<=a.ID
pro2 rrrrr,ttttt
*/

--> 2005
select A, B=(stuff((select ','+B from #T where A=a.A for xml path('')),1,1,'')) from #T a group by A
/*
A    B
---- -----------------------------
pro1 qqqqq,wwwww,eeeee,yyyyy,uuuuu
pro2 rrrrr,ttttt
*/

#2


DECLARE @t TABLE(col1 varchar(10),col2 varchar(100))

--定义游标并进行合并处理
DECLARE tb CURSOR LOCAL
FOR
SELECT col1,col2 FROM tb ORDER BY  col1,col2
DECLARE @col1_old varchar(10),@col1 varchar(10),@col2 varchar(10),@s varchar(100)
OPEN tb
FETCH tb INTO @col1,@col2
SELECT @col1_old=@col1,@s=''
WHILE @@FETCH_STATUS=0
BEGIN
IF @col1=@col1_old
SELECT @s=@s+','+CAST(@col2 as varchar)
ELSE
BEGIN
INSERT @t VALUES(@col1_old,STUFF(@s,1,1,''))
SELECT @s=','+CAST(@col2 as varchar),@col1_old=@col1
END
FETCH tb INTO @col1,@col2
END
INSERT @t VALUES(@col1_old,STUFF(@s,1,1,''))
CLOSE tb
DEALLOCATE tb
select * from @t

结果:
pro1
eeeee,qqqqq,uuuuu,wwwww,yyyyy pro2
rrrrr,ttttt

#3


看不懂啊。。。。。。我要的是一条语句  要并到一个查询语句里的 ,这么长也用不了啊。。。。加分求解中。。。。

#4




写个合并函数

#5


能否具体点??今天加不了分了,还望不吝赐教啊。。。。

#6


楼主可以先把上面的代码写成一个函数,然后调用函数就可以了

#7


/******************************************/
/*回复:代码20080518002 总:00000000020    */
/*主题:合并字段                          */
/*作者:二等草                             */
/******************************************/
set nocount on
/************例子数据 begin****************/
create table tb(A  varchar(10), B  varchar(10))
insert tb select 'pro1',      'qqqqq'  
insert tb select 'pro1',      'wwwww'  
insert tb select 'pro1',      'eeeee'  
insert tb select 'pro2',      'rrrrr' 
insert tb select 'pro2',      'ttttt'  
insert tb select 'pro1',      'yyyyy'  
insert tb select 'pro1',      'uuuuu'  
go
/************例子数据 end******************/

/************代码     begin***************/
create function getstr(@id varchar(10))
returns varchar(50)
as
begin
 declare @s varchar(50)
 select @s = isnull(@s+',','')+b from tb where a=@id
 return @s
end
go
select a,dbo.getstr(a) from tb group by a
go

/************代码     end*****************/
a                                                             
---------- -------------------------------------------------- 
pro1       qqqqq,wwwww,eeeee,yyyyy,uuuuu
pro2       rrrrr,ttttt

/************结果     begin***************/

/************清除*************************/
drop function getstr
go
drop table tb

推荐阅读
  • ZSI.generate.Wsdl2PythonError: unsupported local simpleType restriction ... [详细]
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • sklearn数据集库中的常用数据集类型介绍
    本文介绍了sklearn数据集库中常用的数据集类型,包括玩具数据集和样本生成器。其中详细介绍了波士顿房价数据集,包含了波士顿506处房屋的13种不同特征以及房屋价格,适用于回归任务。 ... [详细]
  • 本文详细介绍了Spring的JdbcTemplate的使用方法,包括执行存储过程、存储函数的call()方法,执行任何SQL语句的execute()方法,单个更新和批量更新的update()和batchUpdate()方法,以及单查和列表查询的query()和queryForXXX()方法。提供了经过测试的API供使用。 ... [详细]
  • MyBatis多表查询与动态SQL使用
    本文介绍了MyBatis多表查询与动态SQL的使用方法,包括一对一查询和一对多查询。同时还介绍了动态SQL的使用,包括if标签、trim标签、where标签、set标签和foreach标签的用法。文章还提供了相关的配置信息和示例代码。 ... [详细]
  • 本文介绍了如何使用PHP向系统日历中添加事件的方法,通过使用PHP技术可以实现自动添加事件的功能,从而实现全局通知系统和迅速记录工具的自动化。同时还提到了系统exchange自带的日历具有同步感的特点,以及使用web技术实现自动添加事件的优势。 ... [详细]
  • 如何自行分析定位SAP BSP错误
    The“BSPtag”Imentionedintheblogtitlemeansforexamplethetagchtmlb:configCelleratorbelowwhichi ... [详细]
  • 本文介绍了设计师伊振华受邀参与沈阳市智慧城市运行管理中心项目的整体设计,并以数字赋能和创新驱动高质量发展的理念,建设了集成、智慧、高效的一体化城市综合管理平台,促进了城市的数字化转型。该中心被称为当代城市的智能心脏,为沈阳市的智慧城市建设做出了重要贡献。 ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • eclipse学习(第三章:ssh中的Hibernate)——11.Hibernate的缓存(2级缓存,get和load)
    本文介绍了eclipse学习中的第三章内容,主要讲解了ssh中的Hibernate的缓存,包括2级缓存和get方法、load方法的区别。文章还涉及了项目实践和相关知识点的讲解。 ... [详细]
  • Android JSON基础,音视频开发进阶指南目录
    Array里面的对象数据是有序的,json字符串最外层是方括号的,方括号:[]解析jsonArray代码try{json字符串最外层是 ... [详细]
  • 本文详细介绍了Java中vector的使用方法和相关知识,包括vector类的功能、构造方法和使用注意事项。通过使用vector类,可以方便地实现动态数组的功能,并且可以随意插入不同类型的对象,进行查找、插入和删除操作。这篇文章对于需要频繁进行查找、插入和删除操作的情况下,使用vector类是一个很好的选择。 ... [详细]
  • 本文介绍了Android 7的学习笔记总结,包括最新的移动架构视频、大厂安卓面试真题和项目实战源码讲义。同时还分享了开源的完整内容,并提醒读者在使用FileProvider适配时要注意不同模块的AndroidManfiest.xml中配置的xml文件名必须不同,否则会出现问题。 ... [详细]
  • 本文介绍了解决Facebook脸书面试题中插入区间的方法,通过模拟遍历的方式判断当前元素与要插入元素的关系,找到插入点并将新区间插入。同时对算法的时间复杂度和空间复杂度进行了分析。 ... [详细]
  • 合并列值-合并为一列问题需求:createtabletab(Aint,Bint,Cint)inserttabselect1,2,3unionallsel ... [详细]
author-avatar
lady张昕彤
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有