今日看到一篇文章,是关于和并列的,也研究了下,还是不错的
要这种效果。
create table tb(idint, value varchar(10))
insert into tbvalues(1,'aa')
insert into tbvalues(1,'bb')
insert into tbvalues(2,'aaa')
insert into tbvalues(2,'bbb')
insert into tbvalues(2,'ccc')
go
/* stuff(param1, startIndex, length, param2)
说明:将param1中自startIndex(SQL中都是从1开始,而非0)起,删除length个字符,然后用param2替换删掉的字符。*/
SELECT id,
value = stuff
((SELECT ',' + value
FROM tb AS t
WHERE t .id = tb.id FOR xml path('')), 1, 1, '')
FROM tb
GROUP BY id
这样即可。
===================================================================================
收集的资料
- /*
- 标题:按某字段合并字符串之一(简单合并)
- 作者:(十八年风雨,守得冰山雪莲花开)
- 时间: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 varchar(10)) returns varchar(1000)
- as
- begin
- declare @str varchar(1000)
- select @str = isnull(@str + ',' , '') + cast(value as varchar) from tb where id = @id
- 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
分类:
SQLServer
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· [AI/GPT/综述] AI Agent的设计模式综述
2011-06-27 C#开发和调用Web Service
2011-06-27 jquery常用的插件1000收集