一列多行值合并成一个值(MS SQL SERVER 2008)
来源:互联网 发布:网络教育怎么查学籍 编辑:程序博客网 时间:2024/04/28 11:50
- 描述:将如下形式的数据按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
0 0
- 一列多行值合并成一个值(MS SQL SERVER 2008)
- 一列多行值合并成一个值
- 在MS SQL中将表中多行数据合并成一列数据
- Sql语句将两列合并成一列
- SQL语句 合并列值 将一列的多个值合并成一行
- SQL多行合并一列
- SQL Server将一列的多行内容拼接成一行或一个字符串的问题
- 将两列合并成一列
- 特殊sql【一】(例:多列合并成一列)
- SQL将一行多列数据合并成 一列
- sql 把不相等的值合并到一列里面
- 怎样在Access和MS Sql Server中使一列字段自动编号增加(如 id int 主键 这一列自动增加)
- MS SQL Server 2008分布式查询MySQL
- MS SQL Server 2008的连接字符串
- MS SQL Server 2008安装图集
- xp下安装ms sql server 2008
- Ms Sql Server 2008分页例子
- MS SQL Server 2008新增功能示例
- 黑马程序员-C语言回顾-开发概述
- 黑马程序员--学习笔记--正则表达式
- 二分
- Java对象——死或生
- 关于含有单双引号字符串类型的数据插入mysql遇到的问题
- 一列多行值合并成一个值(MS SQL SERVER 2008)
- iOS推送pem文件制作并附上PHP推送代码
- mac版sametime最新版下载
- 美团面试题 求字符串S中最长重复子串长度
- Editor API 文档
- Mysql的存储引擎之:InnoDB存储引擎
- 使用vlc实现视频TS流的推送
- UML序列图
- 滑动视图 Swipe Views