- 浏览: 65138 次
- 性别:
- 来自: 珠海
文章分类
最新评论
描述:将如下形式的数据按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 723--PKselect * from sys.key_con ... -
SQL作业的操作大全
2013-03-21 16:00 903SQL作业的操作全 --定义创建作业DECLARE @ ... -
Oracle创建删除用户、角色、表空间、导入导出..命令总结
2012-12-11 14:18 927//创建临时表空间 create temporary ta ... -
sql 查询出每个科目成绩第一的学生信息
2012-07-10 09:10 5562一次性查询出每个科目的成绩第一的学生,在SQL SERVE ... -
用SQL语句添加删除修改字段等操作
2012-05-28 14:10 2158用SQL语句添加删除修改字段1.增加字段 alter ... -
SQL中 patindex函数的用法
2012-03-13 11:12 1136语法格式:PATINDEX ( '%pattern%' , e ... -
查询DB2多行数据一行显示(精简sql)
2012-02-21 09:45 1801select o1.ORGTYPE,varchar(repla ... -
SQL+Assistant+v4.8&2Bkey
2011-10-25 09:09 820SQL+Assistant+v4.8&2Bkey -
ROW_NUMBER、RANK、DENSE_RANK的用法
2011-10-19 08:39 861ROW_NUMBER、RANK、DENSE_RANK的用法 ... -
用 SQL 语句查看 SQL Server 端口号
2011-09-01 11:00 4431用 SQL 语句查看 SQL Server 2005 端口号 ... -
db2中关于递归(with)的使用
2011-05-24 19:15 6344db2中关于递归(with)的使用因为有人问及,这边简单的再探 ... -
DB2常用函数与Oracle比较
2011-05-19 09:47 18431、类型转化函数:decimal, double, Inte ... -
oracle 的wmsys.wm_concat函数用法
2011-05-17 14:25 1553无意中碰到wmsys.wm_concat这个函数很好很强大. ... -
Oracle相关的1000个命令
2011-02-23 09:22 1707Oracle相关的1000个命令(实用) 比较适合初学者,所 ... -
Sql Server 常用日期格式
2011-02-19 10:31 824Sql Server 常用日期格式 SQL Server中文 ... -
SQL语句优化34条(常拿来用用)
2011-02-18 08:32 7291)选择最有效率的表名顺序(只在基于规则的优化器中有效): ... -
列出一个表的字段的全部信息
2010-12-17 11:00 875select rtrim(b.name) ascolname ... -
汇总数据到一行
2010-11-15 21:17 827--sql server 2005 --执行 select ... -
SQL的行列转化问题
2010-10-21 16:04 1045SQL Server中行列转换 Pivot UnPivot ... -
Oracle 任意两个时间之间的日期 时间列表
2010-10-12 16:18 997如何查找2个时间之间的日期列表? 如查找 2004-01-0 ...
相关推荐
主要是关于sqlserver的多行转列的问题,这是我经过个人测试的语句。
昨天遇到一个SQL Server的问题:需要写一个储存过程来处理几个表中的数据,最后问题出在我想将一个表的一个列的多行内容拼接成一行,比如表中有两列数据 : 类别 名称 AAA 企业1 AAA 企业2 AAA 企业3 ...
当MS-SQLServer数据库显示为置疑时,可以用它来修复
资源名称:MS-SQL SERVER从字符串中搜索符合指定范围的数值资源截图: 资源太大,传百度网盘了,链接在附件中,有需要的同学自取。
MS SQL Server JDBC驱动是用于Java应用程序与Microsoft SQL Server数据库之间通信的一个关键组件。JDBC(Java Database Connectivity)是Java编程语言中的一个标准接口,它允许Java开发者连接到各种类型的数据库,...
PB是一种流行的客户端/服务器应用系统开发工具,它提供了与多种主流数据库管理系统(如MS-SQL Server 7.0)的高性能专用接口。本文档将详细介绍如何在PB的前端应用程序中实现对后台数据库的实时监控,以及数据的备份...
在SQL中,将多行数据合并为一行,尤其是在某一列进行字符串拼接,是一项常见的需求。这通常用于汇总数据、创建报表或者为了分析目的而整合信息。本文将深入探讨如何利用SQL实现多行数据的合并,特别关注字符串拼接的...
在SQL中,有时候我们需要将查询结果中多行的数据合并成一行,这在处理某些特定的报表或数据分析时非常有用。这种技术通常被称为行合并或行聚合。在本例中,我们将探讨如何使用纯SQL实现这一功能,特别是针对Oracle...
本文将深入探讨四个主要的数据库驱动包: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将列分割成多列存为临时表,再将多行某个字段拼接合并为一行
利用Nmap对MS-SQLSERVER进行渗透.pdf
### MS-SQL Server杂志-事务全攻略 #### SQL Server 发展及特性 ##### SQL Server 发展历程 SQL Server 是微软公司推出的一款关系型数据库管理系统,自1989年发布以来,经历了多个版本的迭代升级。它最初由微软、...
jTDS - SQL Server and Sybase JDBC driver 1.2.2 正式版 <br>一个Microsoft SQL Server数据库的Jdbc driver。开源的非常好用。 下载地址:http://jtds.sourceforge.net/<br><br><br>
SQL Server 2008是微软在2008年推出的一款企业级关系型数据库管理系统,它是SQL Server系列中的一个重要版本,提供了强大的数据存储和管理功能。 #### 二、T-SQL编程基础 本书主要聚焦于T-SQL(Transact-SQL)编程...
T-SQL,即Transact-SQL,是SQL的一个扩展,主要用于微软的SQL Server系统中,用于数据查询、更新、插入和删除,以及复杂的存储过程和触发器的编写。 在SQL Server 2008版本中,T-SQL得到了许多增强和改进,这本书将...
可根据关键字符将一列分成多行显示,例如 A B 1 1.1.2 拆分成 1 1 1 1 1 2 进行相关的显示
- **T-SQL简介**:T-SQL是Transact-SQL的简称,它是微软SQL Server数据库管理系统所使用的SQL方言,是一种用于管理SQL Server数据库的标准语言。 - **SQL Server 2012版本特点**:SQL Server 2012是Microsoft公司...
在IT行业中,MS-SQL Server作为一款广泛使用的数据库管理系统,其安全性与数据完整性至关重要。然而,在实际操作过程中,用户可能会遇到忘记数据库管理员密码的情况,这无疑会给数据库的管理和维护带来不便。本文将...