`

MS-SQL Server 多行转为一列的合并

阅读更多
描述:将如下形式的数据按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
分享到:
评论

相关推荐

    sql多行转列

    主要是关于sqlserver的多行转列的问题,这是我经过个人测试的语句。

    SQL Server将一列的多行内容拼接成一行的实现方法

    昨天遇到一个SQL Server的问题:需要写一个储存过程来处理几个表中的数据,最后问题出在我想将一个表的一个列的多行内容拼接成一行,比如表中有两列数据 : 类别 名称 AAA 企业1 AAA 企业2 AAA 企业3 ...

    MS-SQLServer数据库恢复工具

    当MS-SQLServer数据库显示为置疑时,可以用它来修复

    sql实现多行合并一行

    在SQL中,有时候我们需要将查询结果中多行的数据合并成一行,这在处理某些特定的报表或数据分析时非常有用。这种技术通常被称为行合并或行聚合。在本例中,我们将探讨如何使用纯SQL实现这一功能,特别是针对Oracle...

    MS-SQLSERVER从字符串中搜索符合指定范围的数值

    资源名称:MS-SQL SERVER从字符串中搜索符合指定范围的数值资源截图: 资源太大,传百度网盘了,链接在附件中,有需要的同学自取。

    SQL CLR扩展DLL 在MS-SQL Server 环境中实现完整的文件、目录操作

    CLR扩展DLL 在MS-SQL Server 环境中实现文件、目录操作,程序使用VS2010编写,语言Vb.net。运行起来飞一般的感觉! 包含文件、目录操作的常用20多个函数,支持网络访问文件。 我经过5~6年的使用,实现用SQL管理复杂...

    在PB中实现MS-SQL Server中的功能.pdf

    PB是一种流行的客户端/服务器应用系统开发工具,它提供了与多种主流数据库管理系统(如MS-SQL Server 7.0)的高性能专用接口。本文档将详细介绍如何在PB的前端应用程序中实现对后台数据库的实时监控,以及数据的备份...

    sql 多行合并某一列字符串拼接的示例

    在SQL中,将多行数据合并为一行,尤其是在某一列进行字符串拼接,是一项常见的需求。这通常用于汇总数据、创建报表或者为了分析目的而整合信息。本文将深入探讨如何利用SQL实现多行数据的合并,特别关注字符串拼接的...

    数据库驱动包(ms-sqlserver,sqlServer,oracle,mysql)

    本文将深入探讨四个主要的数据库驱动包:ms-sqlserver、sqlServer、oracle和mysql。 1. ms-sqlserver驱动: 微软SQL Server驱动程序(ms-sqlserver)主要用于连接到Microsoft SQL Server数据库。它遵循JDBC(Java ...

    ms-sqlserver面试题

    在IT行业中,数据库管理是至关重要的,而Microsoft SQL Server(简称MS SQL Server)作为一款广泛使用的商业关系数据库管理系统,其专业性与复杂性都要求技术人员具备扎实的理论基础和实践经验。针对“ms-sqlserver...

    SQL基础_-_MS-SQL_Server___基础类

    - **标准化的语言**:SQL是一种国际标准的数据库语言,广泛应用于各种数据库系统中,包括MS-SQL Server在内的多种主流数据库产品都支持SQL标准。 #### 2. 学习SQL的参考资料 学习SQL的过程中,选择合适的参考书籍...

    一列分割成多列,多行合并为一行

    SQL语句用with将列分割成多列存为临时表,再将多行某个字段拼接合并为一行

    SQL SERVER 根据关键字符,将一列分成多行

    可根据关键字符将一列分成多行显示,例如 A B 1 1.1.2 拆分成 1 1 1 1 1 2 进行相关的显示

    MS-sql数据库密码忘了还原数据库命令

    在IT行业中,MS-SQL Server作为一款广泛使用的数据库管理系统,其安全性与数据完整性至关重要。然而,在实际操作过程中,用户可能会遇到忘记数据库管理员密码的情况,这无疑会给数据库的管理和维护带来不便。本文将...

    MS.SQL.Server.2008.技术内幕:T-SQL.查询.rar

    《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

    MS-SQL JDBC 2.0 是微软提供的Java数据库连接(JDBC)驱动程序,专为与Microsoft SQL Server进行交互而设计。这个版本的驱动程序允许Java应用程序通过JDBC API与SQL Server 2000、2005和2008等不同版本进行通信。...

    SQL Server高级查询与T-SQL编程知识点汇总

    SQL Server高级查询与T-SQL编程是数据库管理与开发中的核心技能,涵盖了多个关键知识点。以下是对这些主题的详细说明: 1. **数据库设计**: - **需求分析**:这是设计过程的第一步,旨在理解用户的需求,确定系统...

    动网论坛8.2.0数据库-SQL SERVER版

    根据动网论坛Dvbbs 8.2.0 正式版(2008-10-21更新)而做的SQL SERVER版...这是MS SQL SERVER 2000里的备份档,不能直接打开的。下载后,你需要导入到你的数据库才可以使用。关于如何导入的问题,请看看有关MS SQL的书。

    SqlServer,将多行记录按分组信息一行显示

    SqlServer将多行记录按分组信息一行显示

    Microsoft_SQL_Server_2005技术内幕:T-SQL查询.pdf

    本书是Inside Microsoft SQL Server 2005系列四本著作中的一本。它详细介绍了T-SQL的内部体系结构,包含了非常全面的编程参考,提供了使用Transact-SQL(T-SQL)的专家级指导,囊括了非常全面的编程参考,揭示了基于...

Global site tag (gtag.js) - Google Analytics