- 浏览: 65536 次
- 性别:
- 来自: 珠海
文章分类
最新评论
描述:将如下形式的数据按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 731--PKselect * from sys.key_con ... -
SQL作业的操作大全
2013-03-21 16:00 913SQL作业的操作全 --定义创建作业DECLARE @ ... -
Oracle创建删除用户、角色、表空间、导入导出..命令总结
2012-12-11 14:18 935//创建临时表空间 create temporary ta ... -
sql 查询出每个科目成绩第一的学生信息
2012-07-10 09:10 5591一次性查询出每个科目的成绩第一的学生,在SQL SERVE ... -
用SQL语句添加删除修改字段等操作
2012-05-28 14:10 2168用SQL语句添加删除修改字段1.增加字段 alter ... -
SQL中 patindex函数的用法
2012-03-13 11:12 1147语法格式:PATINDEX ( '%pattern%' , e ... -
查询DB2多行数据一行显示(精简sql)
2012-02-21 09:45 1815select o1.ORGTYPE,varchar(repla ... -
SQL+Assistant+v4.8&2Bkey
2011-10-25 09:09 825SQL+Assistant+v4.8&2Bkey -
ROW_NUMBER、RANK、DENSE_RANK的用法
2011-10-19 08:39 871ROW_NUMBER、RANK、DENSE_RANK的用法 ... -
用 SQL 语句查看 SQL Server 端口号
2011-09-01 11:00 4440用 SQL 语句查看 SQL Server 2005 端口号 ... -
db2中关于递归(with)的使用
2011-05-24 19:15 6366db2中关于递归(with)的使用因为有人问及,这边简单的再探 ... -
DB2常用函数与Oracle比较
2011-05-19 09:47 18551、类型转化函数:decimal, double, Inte ... -
oracle 的wmsys.wm_concat函数用法
2011-05-17 14:25 1561无意中碰到wmsys.wm_concat这个函数很好很强大. ... -
Oracle相关的1000个命令
2011-02-23 09:22 1713Oracle相关的1000个命令(实用) 比较适合初学者,所 ... -
Sql Server 常用日期格式
2011-02-19 10:31 833Sql Server 常用日期格式 SQL Server中文 ... -
SQL语句优化34条(常拿来用用)
2011-02-18 08:32 7351)选择最有效率的表名顺序(只在基于规则的优化器中有效): ... -
列出一个表的字段的全部信息
2010-12-17 11:00 881select rtrim(b.name) ascolname ... -
汇总数据到一行
2010-11-15 21:17 833--sql server 2005 --执行 select ... -
SQL的行列转化问题
2010-10-21 16:04 1051SQL Server中行列转换 Pivot UnPivot ... -
Oracle 任意两个时间之间的日期 时间列表
2010-10-12 16:18 1006如何查找2个时间之间的日期列表? 如查找 2004-01-0 ...
相关推荐
主要是关于sqlserver的多行转列的问题,这是我经过个人测试的语句。
昨天遇到一个SQL Server的问题:需要写一个储存过程来处理几个表中的数据,最后问题出在我想将一个表的一个列的多行内容拼接成一行,比如表中有两列数据 : 类别 名称 AAA 企业1 AAA 企业2 AAA 企业3 ...
当MS-SQLServer数据库显示为置疑时,可以用它来修复
在SQL中,有时候我们需要将查询结果中多行的数据合并成一行,这在处理某些特定的报表或数据分析时非常有用。这种技术通常被称为行合并或行聚合。在本例中,我们将探讨如何使用纯SQL实现这一功能,特别是针对Oracle...
资源名称:MS-SQL SERVER从字符串中搜索符合指定范围的数值资源截图: 资源太大,传百度网盘了,链接在附件中,有需要的同学自取。
CLR扩展DLL 在MS-SQL Server 环境中实现文件、目录操作,程序使用VS2010编写,语言Vb.net。运行起来飞一般的感觉! 包含文件、目录操作的常用20多个函数,支持网络访问文件。 我经过5~6年的使用,实现用SQL管理复杂...
PB是一种流行的客户端/服务器应用系统开发工具,它提供了与多种主流数据库管理系统(如MS-SQL Server 7.0)的高性能专用接口。本文档将详细介绍如何在PB的前端应用程序中实现对后台数据库的实时监控,以及数据的备份...
在SQL中,将多行数据合并为一行,尤其是在某一列进行字符串拼接,是一项常见的需求。这通常用于汇总数据、创建报表或者为了分析目的而整合信息。本文将深入探讨如何利用SQL实现多行数据的合并,特别关注字符串拼接的...
本文将深入探讨四个主要的数据库驱动包:ms-sqlserver、sqlServer、oracle和mysql。 1. ms-sqlserver驱动: 微软SQL Server驱动程序(ms-sqlserver)主要用于连接到Microsoft SQL Server数据库。它遵循JDBC(Java ...
在IT行业中,数据库管理是至关重要的,而Microsoft SQL Server(简称MS SQL Server)作为一款广泛使用的商业关系数据库管理系统,其专业性与复杂性都要求技术人员具备扎实的理论基础和实践经验。针对“ms-sqlserver...
- **标准化的语言**:SQL是一种国际标准的数据库语言,广泛应用于各种数据库系统中,包括MS-SQL Server在内的多种主流数据库产品都支持SQL标准。 #### 2. 学习SQL的参考资料 学习SQL的过程中,选择合适的参考书籍...
SQL语句用with将列分割成多列存为临时表,再将多行某个字段拼接合并为一行
可根据关键字符将一列分成多行显示,例如 A B 1 1.1.2 拆分成 1 1 1 1 1 2 进行相关的显示
在IT行业中,MS-SQL Server作为一款广泛使用的数据库管理系统,其安全性与数据完整性至关重要。然而,在实际操作过程中,用户可能会遇到忘记数据库管理员密码的情况,这无疑会给数据库的管理和维护带来不便。本文将...
《MS.SQL.Server.2008.技术内幕:T-SQL.查询》是关于Microsoft SQL Server 2008数据库管理系统中T-SQL查询语言的一本深入解析书籍。T-SQL(Transact-SQL)是SQL Server的标准查询语言,它是SQL的扩展,包含了SQL的...
MS-SQL JDBC 2.0 是微软提供的Java数据库连接(JDBC)驱动程序,专为与Microsoft SQL Server进行交互而设计。这个版本的驱动程序允许Java应用程序通过JDBC API与SQL Server 2000、2005和2008等不同版本进行通信。...
SQL Server高级查询与T-SQL编程是数据库管理与开发中的核心技能,涵盖了多个关键知识点。以下是对这些主题的详细说明: 1. **数据库设计**: - **需求分析**:这是设计过程的第一步,旨在理解用户的需求,确定系统...
根据动网论坛Dvbbs 8.2.0 正式版(2008-10-21更新)而做的SQL SERVER版...这是MS SQL SERVER 2000里的备份档,不能直接打开的。下载后,你需要导入到你的数据库才可以使用。关于如何导入的问题,请看看有关MS SQL的书。
SqlServer将多行记录按分组信息一行显示
本书是Inside Microsoft SQL Server 2005系列四本著作中的一本。它详细介绍了T-SQL的内部体系结构,包含了非常全面的编程参考,提供了使用Transact-SQL(T-SQL)的专家级指导,囊括了非常全面的编程参考,揭示了基于...