`
zhgz0018
  • 浏览: 9673 次
  • 性别: 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自定义函数,用于合并字符串列,可以在分组的情况下对varchar类型的字段合并

    Oracle多行记录合并

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

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

    1.被集合字段范围小且固定型 灵活性 性能 难度 2.固定表固定字段函数法 灵活性 性能 难度 3.灵活表函数法 灵活性 性能 难度 4.一条SQL法 灵活性

    经典SQL脚本大全

    │ │ 3.3 各种字符串合并处理示例.sql │ │ 3.4.1 分段截取函数.sql │ │ 3.4.2 分段更新函数.sql │ │ 3.4.3 IP地址处理函数.sql │ │ 3.5.1 字符串比较函数.sql │ │ 3.5.2 字符串并集&交集处理示例.sql │ ...

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

    怎么合并多行记录的字符串,一直是oracle新手喜欢问的SQL问题之一,关于这个问题的帖子我看过不下30个了,现在就对这个问题,进行一个总结。

    SqlServer下通过XML拆分字符串的方法

    代码如下: DECLARE @idoc int; DECLARE @doc xml; set @doc=cast(‘<Root><item>’+replace(@SelectedProjectArray,’,’,'</ProjID></item><item><ProjID>’)+'</ProjID></item>’ as xml) EXEC sp_xml_...

    SQL SERVER2012中新增函数之字符串函数CONCAT详解

    SQLSERVER 2012新增了两个字符串函数CONCAT和FORMAT。本文首先介绍一下CONCAT,CONCAT函数的作用是可以返回多个字符串拼接后的结果。 CONCAT 函数最多可以连接255个字符变量,当调用这个函数的时候需要至少接收两个...

    Sqlserver2000经典脚本

    纵.sql │ 复杂年月处理.sql │ 统计--交叉表+日期+优先.sql │ ├─第03章 │ │ 3.2 各种字符串分拆处理函数.sql │ │ 3.3 各种字符串合并处理示例.sql │ │ 3.4.1 分段截取函数....

    SQL COOKBOOK(压缩1/2)

    第6章 使用字符串 第7章 使用数字 第8章 日期运算 第9章 日期操作 第10章 范围处理 第11章 高级查找 第12章 报表和数据仓库运算 第13章 分层查询 第14章 若干另类目标 …… 附录A 窗口函数补充 ...

    SQL语法大全

    这里的ActiveConnection可以是一个Connection对象或是一串包含数据库连接信息(ConnectionString)的字符串参数。 CursorType Recordset对象Open方法的CursorType参数表示将以什么样的游标类型启动数据,包括...

    SQL语句集锦.rar

    合并字符串.txt 多列的行转列.sql 多行补充.sql 多表对多表进行统计.txt 大小写转换.txt 子查寻和内联查寻.txt 学生名次.txt 嵌套游标的使用.txt 拷贝表格.txt 排序.txt 断开并更改数据库名称.txt 新建 文本文档...

    将子表信息合并为一个字符串的例子

    举个例子,如何实现将子表的数据与主表数据显示在一起。

    SQL COOKBOOK(压缩2/2)

    第6章 使用字符串 第7章 使用数字 第8章 日期运算 第9章 日期操作 第10章 范围处理 第11章 高级查找 第12章 报表和数据仓库运算 第13章 分层查询 第14章 若干另类目标 …… 附录A 窗口函数补充 ...

    达梦数据库_SQL语言手册

    达梦数据库_SQL语言手册.pdf 数据库快照定义语句 数据库快照删除语句 第章数据查询语句和全文检索语句 单表查询 简单查询 带条件查询 集函数 情况表达式 连接查询 子查询 标量子查询 表子查询 派生表子...

    oracle学习文档 笔记 全面 深刻 详细 通俗易懂 doc word格式 清晰 连接字符串

    ORACLE数据库系统是美国ORACLE公司(甲骨文)提供的以分布式数据库为核心的一组软件产品,是目前最流行的客户/服务器(CLIENT/SERVER)或B/S体系结构的数据库之一。  拉里•埃里森  就业前景 从就业与择业的...

    LECCO SQL Expert (智能自动SQL优化)

    在字段DPT_ID上进行了合并空字符串的操作以诱导数据库先执行子查询中的(SELECTDPT_ID||'FROMDEPART-MENTWHEREDPT_NAMELIKE'AC%')在子查询完成后再与EMPLOYEE表进行嵌套循环连接(NestedLoopJoin)。图7 ...

    MYSQL常用命令大全

    MySQL以YYYY-MM-DD格式来显示DATE值,但是允许你使用字符串或数字把值赋给DATE列 4.CHAR(M) 型:定长字符串类型,当存储时,总是是用空格填满右边到指定的长度 5.BLOB TEXT类型,最大长度为65535(2^16-1)个字符...

Global site tag (gtag.js) - Google Analytics