`
zhgz0018
  • 浏览: 10057 次
  • 性别: Icon_minigender_1
  • 来自: 济南
文章分类
社区版块
存档分类
最新评论

按某字段合并字符串之一(简单合并) ----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

 

--4、简单小例子

----假设我们有如下数据表
--
----菜系表------------
--
店名        菜系------
--
澳门豆捞    川菜
--
澳门豆捞    粤菜
--
澳门豆捞    闽菜
--
为民大酒店  鲁菜
--
为民大酒店  粤菜
--
为民大酒店  川菜
--
---------------------

-------执行如下语句
select 店名,菜系=STUFF((select ','+ltrim(菜系) from 菜系表 where 店名=t.店名 for XML path('')),1,1,'')
from 菜系表 t
group by 店名

-------结果如下-------------
--
店名        菜系----------
--
澳门豆捞    川菜,闽菜,粤菜
--
为民大酒店  川菜,鲁菜,粤菜
--
--------------------------

转自多个地方就不一一列举了

谁转走、请附上

 

 

分享到:
评论

相关推荐

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

    标题:按某字段合并字符串之一(简单合并) 描述:将如下形式的数据按id字段合并value字段。 id value —– —— 1 aa 1 bb 2 aaa 2 bbb 2 ccc 需要得到结果: id value —— ———– 1 aa,bb 2 aaa,bbb,...

    sql 多行合并某一列字符串拼接的示例

    在SQL中,将多行数据合并为一行,尤其是在某一列进行字符串拼接,是一项常见的需求。这通常用于汇总数据、创建报表或者为了分析目的而整合信息。本文将深入探讨如何利用SQL实现多行数据的合并,特别关注字符串拼接的...

    sql自定义函数分组合并字符串列

    sql自定义函数,用于合并字符串列,可以在分组的情况下对varchar类型的字段合并

    Oracle字段转字符串/多行记录合并/连接/聚合字符串的几种方法

    在Oracle数据库中,有时我们需要将多个字段值转换为单个字符串,或者将多行记录合并成一行,这在数据处理和报告生成时尤其常见。Oracle提供了多种方法来实现这一目标,包括使用内置函数、PL/SQL过程以及一些高级特性...

    将数据库中的两个字段合并为一个字段

    在数据库管理过程中,经常会遇到需要对数据进行整理和优化的情况,其中一个常见的需求就是将数据库中的两个字段合并为一个字段。这种操作不仅可以简化数据结构,还能提高数据查询的效率。接下来,我们将详细介绍如何...

    数据库字符串相加---字符串相加函数

    根据提供的信息,本文将详细介绍一个在SQL Server 2000环境下用于字符串拼接的自定义函数,并对该函数的功能、实现方法以及应用场景进行深入解析。 ### 一、SQL Server 2000简介 SQL Server 2000是微软发布的一款...

    sql server 2008 将一列值转换成一个字符串

    在SQL Server 2008中,有时我们需要将表中的某一列数据合并成一个单独的字符串,例如将员工编号列合并成一个逗号分隔的字符串。这种操作在生成报表、邮件合并等功能中非常有用。本文的目标是通过一个具体的例子来...

    SQLServer中如何将一个字段的多个记录值合在一行显示

    STRING_AGG 函数可以将一个字段的多个记录值合并到一个字符串中。 例如,我们可以使用以下查询语句来实现字段值的合并: ```sql SELECT 单位名称, STRING_AGG(收费类别, ',') AS 收费类别 FROM 表 GROUP BY 单位...

    ABAP常用字符串操作

    在ABAP中,字符串连接是一种常见的操作方式,用于将两个或多个字符串合并成一个新的字符串。实现字符串连接的方法主要是通过`CONCATENATE`语句。 **语法示例**: ```abap CONCATENATE dobj1 dobj2 INTO result [IN...

    Oracle多行记录合并

    5. **`XMLAGG` 函数:** 虽然主要用于XML处理,但也可以用来合并字符串。它将结果转换为XML格式,然后可以提取出来作为字符串。这种方式适用于需要保留原始数据顺序或者进行XML处理的场合。 6. **`MODEL` 指令:** ...

    SQL Server连接字段的方法

    在SQL Server中,经常会遇到需要将不同的字段进行组合或转换的情况,比如将分别存储年、月、日的三个字段合并成一个日期格式的字符串。这种需求在实际应用中非常常见,尤其是在处理历史遗留数据或者特定格式的数据时...

    SQL Server把某个字段的数据用一条语句转换成字符串

    在SQL Server中,有时我们需要将某个表字段中的多个数据项合并为一个字符串,这通常用于生成报告、拼接查询条件或其他需要数据集合作为单一文本的情况。本篇将详细讲解如何使用一条SQL语句实现这一功能。 首先,...

    Oracle 多行记录合并_连接_聚合字符串的几种方法_oracle_脚本之家1

    `LISTAGG`函数可以将同一分组内的多个值合并成一个字符串,并按照指定的排序顺序(这里是按城市名字的顺序)。这种方法比上一种更灵活,但仍然依赖于固定的表和字段。 3. 灵活表函数法 这种方法更加灵活,但可能会...

    Sql拆分字符串

    在SQL Server中,经常需要对字符串进行操作,例如分割、合并等。本文将详细介绍如何使用SQL Server中的存储过程来实现字符串的拆分,并通过一个具体的例子来展示整个过程。 #### SQL字符串拆分背景介绍 在实际业务...

    SQL字符串函数SQL字符串函数SQL字符串函数

    SQL不仅能够帮助我们有效地存储、检索和操作数据,还提供了一系列内置的函数来支持数据处理,其中字符串函数尤其在数据清洗和格式化方面发挥着重要作用。 #### SQL字符串函数的重要性 SQL字符串函数对于处理文本...

    sqlserver2008 拆分字符串

    在SQL Server 2008中,处理字符串的拆分是一项常见的任务,特别是在处理列表或者多值字段时。本文将详细讲解如何拆分字符串,并提供一个具体的实例来演示这一过程。 首先,我们要解决的问题是如何将一个包含多个值...

    一列分割成多列,多行合并为一行

    SQL语句用with将列分割成多列存为临时表,再将多行某个字段拼接合并为一行

    mysql字符串连接函数

    `GROUP_CONCAT()`函数主要用于聚合查询,它可以将一组值合并成一个字符串,并且可以对结果进行排序以及指定分隔符。 **完整的语法:** ```sql GROUP_CONCAT([DISTINCT] 要连接的字段 [Order BY ASC/DESC 排序字段]...

    在T-SQL中实现字符串类型的聚合统计查询的一种方法.pdf

    例如,若需要将同一类别的商品名称通过逗号分隔合并成一个字符串,SQL Server早期版本(在SQL Server 2012之前)并未提供现成的解决方案。本文针对这一问题,探讨了一种在T-SQL中实现字符串类型聚合统计的方法。 ...

Global site tag (gtag.js) - Google Analytics