分组字符合并SQL语句 按某字段合并字符串之一(简单合并)

 更新时间:2017年02月19日 13:44:16   投稿:mdxy-dxy  
这篇文章主要介绍了分组字符合并SQL语句 按某字段合并字符串之一(简单合并),需要的朋友可以参考下

标题:按某字段合并字符串之一(简单合并)


描述:将如下形式的数据按id字段合并value字段。
id    value
----- ------
1     aa
1     bb
2     aaa
2     bbb
2     ccc
需要得到结果:
id     value
------ -----------
1      aa,bb
2      aaa,bbb,ccc
即:group by id, 求 value 的和(字符串相加)

1、sql2000中只能用自定义的函数解决

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



create function dbo.f_str(@id int) 
returns varchar(100)
as
begin
 
declare @str varchar(1000) 
set @str='' select @str=@str+''+cast(value as varchar) 
from tb where id = @id 
set @str=right(@str , len(@str) - 1) 
return @str
end
go



--调用函数


select id , value = dbo.f_str(id) from tb group by id


drop function dbo.f_str

drop table tb

2、sql2005中的方法

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, [value] = stuff((select ',' + [value] from tb t where id = tb.id 
for xml path('')) , 1 , 1 , '')from tb group by id

drop table tb

3、使用游标合并数据

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

declare @t table(id int,value varchar(100))
--定义结果集表变量
--定义游标并进行合并处理

declare my_cursor cursor local for
select id , value from tb
declare @id_old int , @id int , @value varchar(10) , @s varchar(100)
open my_cursor fetch my_cursor into @id , @value
select @id_old = @id , @s=''while @@FETCH_STATUS = 0
begin
 if @id = @id_old
  select @s = @s + ',' + cast(@value as varchar) else
  begin
  insert @t values(@id_old , stuff(@s,1,1,'')) 
  select @s = ',' + cast(@value as varchar) , @id_old = @id
  end
 fetch my_cursor into @id , @value END 
 insert @t values(@id_old , stuff(@s,1,1,''))
 close my_cursor
 deallocate my_cursor
 select * from @t
drop table tb

以上就是关于分组字符合并SQL语句的介绍。希望对大家有所帮助。

相关文章

  • 轻量级数据库SQL Server Express LocalDb介绍

    轻量级数据库SQL Server Express LocalDb介绍

    这篇文章介绍了轻量级数据库SQL Server Express LocalDb,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-06-06
  • SQL server 三种常用的触发器

    SQL server 三种常用的触发器

    文章介绍了SQL Server中三种常用的触发器:插入触发器、删除触发器和更新触发器,每种触发器在特定操作(插入、删除、更新)发生时触发,触发器可以访问两个虚拟表:Inserted(新数据)和Deleted(旧数据),用于获取和操作数据,感兴趣的朋友一起看看吧
    2025-03-03
  • SQL语句(T-SQL汇总) 用T-SQL画出这些图形

    SQL语句(T-SQL汇总) 用T-SQL画出这些图形

    今天和大家一起来分享一下SQL语句,T-SQL的用法和语法,以及一些例子,目的是帮助大家一起来复习一下T-SQL的基本语句,以便在项目中更快速的运用,当然对于新手来说就更应该去学习和总结了
    2012-07-07
  • SQLServer中排查死锁及死锁问题解决

    SQLServer中排查死锁及死锁问题解决

    在并发访问数据库的环境中,死锁是一个常见的问题,本文主要介绍了SQLServer中排查死锁及死锁问题解决,具有一定的参考价值,感兴趣的可以了解一下
    2024-08-08
  • 基于存储过程的详细介绍

    基于存储过程的详细介绍

    本篇文章小编将为大家介绍,基于存储过程的详细介绍,有需要的朋友可以参考一下
    2013-04-04
  • SQLserver中的any和all运算符的用法

    SQLserver中的any和all运算符的用法

    本文主要介绍了SQL server 中的any和all运算符,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-01-01
  • 数据库触发器DB2和SqlServer有哪些区别

    数据库触发器DB2和SqlServer有哪些区别

    大部分数据库语句的基本语法是相同的,但具体到的每一种数据库,又有些不一样,例如触发器,DB2和SQL Server两种很大的不同。对数据库触发器DB2和SqlServer有哪些区别感兴趣的朋友一起看看本文吧
    2015-11-11
  • SqlServer中批量update语句

    SqlServer中批量update语句

    我现在想把S_USER表中的ACCOUNT批量修改成S_PERSON的ACCOUNT,那么就可以参考下面的语句,要找到对应的字段
    2019-11-11
  • SQL Server 表变量和临时表的区别(详细补充篇)

    SQL Server 表变量和临时表的区别(详细补充篇)

    这篇文章主要介绍了SQL Server 表变量和临时表的区别(详细补充篇),需要的朋友可以参考下
    2015-11-11
  • SQL Server如何保证可空字段中非空值唯一

    SQL Server如何保证可空字段中非空值唯一

    今天同学向我提了一个问题,我觉得蛮有意思,现记录下来大家探讨下。问题是:在一个表里面,有一个允许为空的字段,空是可以重复的,但是不为空的值需要唯一。
    2011-03-03

最新评论