`

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数据库显示为置疑时,可以用它来修复

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

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

    ms -sql server jdbc 驱动 jar 包

    MS SQL Server JDBC驱动是用于Java应用程序与Microsoft SQL Server数据库之间通信的一个关键组件。JDBC(Java Database Connectivity)是Java编程语言中的一个标准接口,它允许Java开发者连接到各种类型的数据库,...

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

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

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

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

    sql实现多行合并一行

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

    数据库驱动包(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将列分割成多列存为临时表,再将多行某个字段拼接合并为一行

    利用Nmap对MS-SQLSERVER进行渗透.pdf

    利用Nmap对MS-SQLSERVER进行渗透.pdf

    MS-SQL Server杂志-事务全攻略

    ### MS-SQL Server杂志-事务全攻略 #### SQL Server 发展及特性 ##### SQL Server 发展历程 SQL Server 是微软公司推出的一款关系型数据库管理系统,自1989年发布以来,经历了多个版本的迭代升级。它最初由微软、...

    jTDS - SQL Server and Sybase JDBC driver 1.2.2 正式版(含源码)

    jTDS - SQL Server and Sybase JDBC driver 1.2.2 正式版 <br>一个Microsoft SQL Server数据库的Jdbc driver。开源的非常好用。 下载地址:http://jtds.sourceforge.net/<br><br><br>

    Inside Microsoft SQL Server 2008 T-SQL Programming.pdf

    SQL Server 2008是微软在2008年推出的一款企业级关系型数据库管理系统,它是SQL Server系列中的一个重要版本,提供了强大的数据存储和管理功能。 #### 二、T-SQL编程基础 本书主要聚焦于T-SQL(Transact-SQL)编程...

    Inside Microsoft SQL Server 2008 T-SQL Programming

    T-SQL,即Transact-SQL,是SQL的一个扩展,主要用于微软的SQL Server系统中,用于数据查询、更新、插入和删除,以及复杂的存储过程和触发器的编写。 在SQL Server 2008版本中,T-SQL得到了许多增强和改进,这本书将...

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

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

    T-SQL性能调优秘笈 基于SQL Server 2012窗口函数_PDF电子书

    - **T-SQL简介**:T-SQL是Transact-SQL的简称,它是微软SQL Server数据库管理系统所使用的SQL方言,是一种用于管理SQL Server数据库的标准语言。 - **SQL Server 2012版本特点**:SQL Server 2012是Microsoft公司...

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

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

Global site tag (gtag.js) - Google Analytics