/*
标题:按某字段合并字符串之一(简单合并)
作者:爱新觉罗.毓华(十八年风雨,守得冰山雪莲花开)
时间:2008-11-06
地点:广东深圳
描述:将如下形式的数据按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
帖子整理
http://topic.csdn.net/u/20100630/12/81803f4d-9323-4694-9410-c644b9d72194.html?31824
分享到:
相关推荐
sql自定义函数,用于合并字符串列,可以在分组的情况下对varchar类型的字段合并
sql 多行合并某一列字符串拼接的示例语句
–说明:例如,将下列数据 id id_value —————– 1 ‘aa,bb’ 2 ‘aa,bb,cc’ 3 ‘aaa,bbb,ccc’ –转换成以下的格式 id id_value —————– 1 ‘aa’ 1 ‘bb’ 2 ‘aa’ 2 ‘bb’ 2 ‘cc’ 3 ‘aaa’ 3 ‘bbb...
NULL 博文链接:https://yufeng521000.iteye.com/blog/2076607
1. 同一个字符/字符串,出现了多少次 2. 同一个字符,第N次出现的位置 3. 多个相同字符连续,合并为一个字符 4. 是否为有效IP/身份证号/手机号等 一. 同一个字符/字符串,出现了多少次 同一个字符,将其替换为...
sqlserver 分组合并字符串 分组统计数量
SQLSERVER 2012新增了两个字符串函数CONCAT和FORMAT。本文首先介绍一下CONCAT,CONCAT函数的作用是可以返回多个字符串拼接后的结果。 CONCAT 函数最多可以连接255个字符变量,当调用这个函数的时候需要至少接收两个...
代码如下: 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 2000,还是在sql 2005 中,都没有提供字符串的聚合函数,所以,当我们在处理下列要求时,会比较麻烦,但在SQL Server 2005中,这种情况得到了改善,本文介绍了在SQL Server 2005中完成...
介绍就不多说了,下边是部分目录,觉得有用的话就顶一个 C:. │ sqlserver2000.txt │ ├─第01章 │ 1.9.1 设置内存选项.sql │ 1.9.2(2) 使用文件及文件组.sql │ 1.9.2(3) 调整...
3.5 字符串分拆与合并处理应用实例 74 3.5.1 字符串比较 74 3.5.2 字符串交集/并集 75 3.5.3 分拆字符串并统计 78 3.5.4 借用字符串实现无规律排序 82 3.5.5 列车车次查询 82 3.6 字符串在动态...
3.3 各种字符串合并处理示例 3.4.1 分段截取函数 3.4.2 分段更新函数 3.4.3 IP地址处理函数 3.5.1 字符串比较函数 3.5.2 字符串并集&交集处理示例 3.5.3 字符串分拆并统计的处理示例 3.5.5 字符串处理示例--
5.3.2 字符串查找 5.4 一个实际的应用程序 5.4.1 识别测量数据的趋势 5.4.2 LISLP算法的复杂度 5.4.3 用T-SQL解决最长上升子序列的长度问题 5.5 总结 第6章 子查询、表表达式和排名函数 6.1 子查询 6.1.1 ...
5.3.2 字符串查找225 5.4 一个实际的应用程序226 5.4.1 识别测量数据的趋势226 5.4.2 LISLP算法的复杂度226 5.4.3 用T-SQL解决最长上升子序列的长度问题227 5.5 总结229 第6章 子查询、表表达式和排名函数231 6.1 ...
3.5 字符串分拆与合并处理应用实例 74 3.5.1 字符串比较 74 3.5.2 字符串交集/并集 75 3.5.3 分拆字符串并统计 78 3.5.4 借用字符串实现无规律排序 82 3.5.5 列车车次查询 82 3.6 字符串在动态Transact...
│ sqlserver2000.txt │ ├─第01章 │ 1.9.1 设置内存选项.sql │ 1.9.2(2) 使用文件及文件组.sql │ 1.9.2(3) 调整tempdb数据库的文件属性.sql │ ├─第02章 │ │ 2.1 日期概念理解中的一些测试.sql │ │ ...
5.3.2 字符串查找225 5.4 一个实际的应用程序226 5.4.1 识别测量数据的趋势226 5.4.2 LISLP算法的复杂度226 5.4.3 用T-SQL解决最长上升子序列的长度问题227 5.5 总结229 第6章 子查询、表表达式和排名函数231 ...
举个例子,如何实现将子表的数据与主表数据显示在一起。
3.支持任意字符串作为每行分隔符,例如\r,\r\n,或者十六进制字符或任意指定的字符串(例如可实现把整个日志文件装入数据库的单个clob字段). 4.支持任意大小的文本,装入几十GB都试过没问题。 5.明确到每一行的错误信息....
在字段DPT_ID上进行了合并空字符串的操作以诱导数据库先执行子查询中的(SELECTDPT_ID||'FROMDEPART-MENTWHEREDPT_NAMELIKE'AC%')在子查询完成后再与EMPLOYEE表进行嵌套循环连接(NestedLoopJoin)。图7 ...