- 浏览: 63539 次
- 性别:
- 来自: 珠海
文章分类
最新评论
描述:将如下形式的数据按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
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
发表评论
-
数据库创建链接远程服务器
2014-05-09 11:59 677--PKselect * from sys.key_con ... -
SQL作业的操作大全
2013-03-21 16:00 867SQL作业的操作全 --定义创建作业DECLARE @ ... -
Oracle创建删除用户、角色、表空间、导入导出..命令总结
2012-12-11 14:18 884//创建临时表空间 create temporary ta ... -
sql 查询出每个科目成绩第一的学生信息
2012-07-10 09:10 5450一次性查询出每个科目的成绩第一的学生,在SQL SERVE ... -
用SQL语句添加删除修改字段等操作
2012-05-28 14:10 2119用SQL语句添加删除修改字段1.增加字段 alter ... -
SQL中 patindex函数的用法
2012-03-13 11:12 1096语法格式:PATINDEX ( '%pattern%' , e ... -
查询DB2多行数据一行显示(精简sql)
2012-02-21 09:45 1748select o1.ORGTYPE,varchar(repla ... -
SQL+Assistant+v4.8&2Bkey
2011-10-25 09:09 788SQL+Assistant+v4.8&2Bkey -
ROW_NUMBER、RANK、DENSE_RANK的用法
2011-10-19 08:39 820ROW_NUMBER、RANK、DENSE_RANK的用法 ... -
用 SQL 语句查看 SQL Server 端口号
2011-09-01 11:00 4384用 SQL 语句查看 SQL Server 2005 端口号 ... -
db2中关于递归(with)的使用
2011-05-24 19:15 6265db2中关于递归(with)的使用因为有人问及,这边简单的再探 ... -
DB2常用函数与Oracle比较
2011-05-19 09:47 18011、类型转化函数:decimal, double, Inte ... -
oracle 的wmsys.wm_concat函数用法
2011-05-17 14:25 1517无意中碰到wmsys.wm_concat这个函数很好很强大. ... -
Oracle相关的1000个命令
2011-02-23 09:22 1674Oracle相关的1000个命令(实用) 比较适合初学者,所 ... -
Sql Server 常用日期格式
2011-02-19 10:31 799Sql Server 常用日期格式 SQL Server中文 ... -
SQL语句优化34条(常拿来用用)
2011-02-18 08:32 6991)选择最有效率的表名顺序(只在基于规则的优化器中有效): ... -
列出一个表的字段的全部信息
2010-12-17 11:00 850select rtrim(b.name) ascolname ... -
汇总数据到一行
2010-11-15 21:17 796--sql server 2005 --执行 select ... -
SQL的行列转化问题
2010-10-21 16:04 1014SQL Server中行列转换 Pivot UnPivot ... -
Oracle 任意两个时间之间的日期 时间列表
2010-10-12 16:18 957如何查找2个时间之间的日期列表? 如查找 2004-01-0 ...
相关推荐
昨天遇到一个SQL Server的问题:需要写一个储存过程来处理几个表中的数据,最后问题出在我想将一个表的一个列的多行内容拼接成一行,比如表中有两列数据 : 类别 名称 AAA 企业1 AAA 企业2 AAA 企业3 ...
当MS-SQLServer数据库显示为置疑时,可以用它来修复
主要是关于sqlserver的多行转列的问题,这是我经过个人测试的语句。
MS-SQL Server杂志-事务全攻略 SQL Server安全,管理,语法,应用等几大块
资源名称:MS-SQL SERVER从字符串中搜索符合指定范围的数值资源截图: 资源太大,传百度网盘了,链接在附件中,有需要的同学自取。
sql 多行合并某一列字符串拼接的示例语句
CLR扩展DLL 在MS-SQL Server 环境中实现文件、目录操作,程序使用VS2010编写,语言Vb.net。运行起来飞一般的感觉! 包含文件、目录操作的常用20多个函数,支持网络访问文件。 我经过5~6年的使用,实现用SQL管理复杂...
可以实现多行查询数据转换到一行上显示,多行的某列信息用“,”号隔开。
SQL Server是一个可扩展的、高性能的、为分布式客户机/服务器计算所设计的数据库管理系统,在企业中有着非常重要的作用。但是在SQL Server的使用管理中会出现这样那样是问题,本刊整理了MS-SQL Server热点讨论问题,...
数据库驱动程序包(ms-sqlserver,sqlServer,oracle,mysql)
SQL基础_-_MS-SQL_Server___基础类SQL基础_-_MS-SQL_Server___基础类SQL基础_-_MS-SQL_Server___基础类
java 连接sqlserver使用的java-sqlserver-connect.jar包。 java连接sqlserver使用的jar包,包含jre7、jre8两种使用 sqlserver.ja
jTDS - SQL Server and Sybase JDBC driver 1.2.2 正式版 <br>一个Microsoft SQL Server数据库的Jdbc driver。开源的非常好用。 下载地址:http://jtds.sourceforge.net/<br><br><br>
在PB中实现MS-SQL Server中的功能.pdf
IBM DB2、Oracle、MS-SQL Server、MySQL常用数据库数据迁移
Veritas-NetBackup-5.1设置MS-SQLServer-2000的备份策略的典型配置.docx
可根据关键字符将一列分成多行显示,例如 A B 1 1.1.2 拆分成 1 1 1 1 1 2 进行相关的显示
wamp下对MS-SQLSERVER的连接配置-PHP-THINKPHP5通过.doc
湖南某大学的优秀学士学位论文休闲管理系统采用Delphi ms-sql server 开发