`

sqlserver字符串合并(merge)方法汇总

阅读更多

--方法1
--使用游标法进行字符串合并处理的示例。
--处理的数据
CREATE TABLE tb(col1 varchar(10),col2 int)
INSERT tb SELECT 'a',1
UNION ALL SELECT 'a',2
UNION ALL SELECT 'b',1
UNION ALL SELECT 'b',2
UNION ALL SELECT 'b',3

--合并处理
--定义结果集表变量
DECLARE @t TABLE(col1 varchar(10),col2 varchar(100))

--定义游标并进行合并处理
DECLARE tb CURSOR LOCAL
FOR
SELECT col1,col2 FROM tb ORDER BY  col1,col2
DECLARE @col1_old varchar(10),@col1 varchar(10),@col2 int,@s varchar(100)
OPEN tb
FETCH tb INTO @col1,@col2
SELECT @col1_old=@col1,@s=''
WHILE @@FETCH_STATUS=0
BEGIN
 IF @col1=@col1_old
  SELECT @s=@s+','+CAST(@col2 as varchar)
 ELSE
 BEGIN
  INSERT @t VALUES(@col1_old,STUFF(@s,1,1,''))
  SELECT @s=','+CAST(@col2 as varchar),@col1_old=@col1
 END
 FETCH tb INTO @col1,@col2
END
INSERT @t VALUES(@col1_old,STUFF(@s,1,1,''))
CLOSE tb
DEALLOCATE tb
--显示结果并删除测试数据
SELECT * FROM @t
DROP TABLE tb
/*--结果
col1       col2
---------- -----------
a          1,2
b          1,2,3
--*/
GO

 


--方法2
--使用用户定义函数,配合SELECT处理完成字符串合并处理的示例
--处理的数据
CREATE TABLE tb(col1 varchar(10),col2 int)
INSERT tb SELECT 'a',1
UNION ALL SELECT 'a',2
UNION ALL SELECT 'b',1
UNION ALL SELECT 'b',2
UNION ALL SELECT 'b',3
GO

--合并处理函数
CREATE FUNCTION dbo.f_str(@col1 varchar(10))
RETURNS varchar(100)
AS
BEGIN
 DECLARE @re varchar(100)
 SET @re=''
 SELECT @re=@re+','+CAST(col2 as varchar)
 FROM tb
 WHERE col1=@col1
 RETURN(STUFF(@re,1,1,''))
END
GO

--调用函数
SELECT col1,col2=dbo.f_str(col1) FROM tb GROUP BY col1
--删除测试
DROP TABLE tb
DROP FUNCTION f_str
/*--结果
col1       col2
---------- -----------
a          1,2
b          1,2,3
--*/
GO

 

--方法3
--使用临时表实现字符串合并处理的示例
--处理的数据
CREATE TABLE tb(col1 varchar(10),col2 int)
INSERT tb SELECT 'a',1
UNION ALL SELECT 'a',2
UNION ALL SELECT 'b',1
UNION ALL SELECT 'b',2
UNION ALL SELECT 'b',3

--合并处理
SELECT col1,col2=CAST(col2 as varchar(100))
INTO #t FROM tb
ORDER BY col1,col2
DECLARE @col1 varchar(10),@col2 varchar(100)
UPDATE #t SET
 @col2=CASE WHEN @col1=col1 THEN @col2+','+col2 ELSE col2 END,
 @col1=col1,
 col2=@col2
SELECT * FROM #t
/*--更新处理后的临时表
col1       col2
---------- -------------
a          1
a          1,2
b          1
b          1,2
b          1,2,3
--*/
--得到最终结果
SELECT col1,col2=MAX(col2) FROM #t GROUP BY col1
/*--结果
col1       col2
---------- -----------
a          1,2
b          1,2,3
--*/
--删除测试
DROP TABLE tb,#t
GO

 

http://aierong.cnblogs.com/

 

分享到:
评论

相关推荐

    Sqlserver 2014 之 自定义字符串聚合函数

    标准的T-SQL提供了一些内置的聚合函数,如SUM、AVG、MAX和MIN,但它们并不支持将多个字符串合并为一个单一的字符串。在描述中提到的“Sqlserver 2014 之 自定义字符串聚合函数”正是针对这个需求而展开的讨论。 在...

    SQL server 触发器,在触发Merge过程中,逐行触发的解决办法 用group by 避免是一次触发中的多行更新或删除。

    总的来说,优化SQL Server的Merge触发器通常需要对业务逻辑有深入理解,并且要考虑到性能和并发性。使用GROUP BY可以帮助控制触发器的处理方式,避免一次性处理大量行,从而提高系统效率并减少潜在错误。在实际应用...

    sqlserver与myqsql区别

    总结来说,MS SQL Server和MySQL虽然都是关系型数据库,但在语法、数据类型、函数、字符串处理、大数据处理、特色功能、性能和扩展性以及生态系统等许多方面都有不同的实现和特点。选择使用哪一种数据库,需要根据...

    SQL Server数据库占用过多内存的解决方法

    ### SQL Server数据库占用过多内存的解决方法 #### 内存使用概述 在SQL Server数据库运行过程中,内存管理是一项至关重要的任务。SQL Server会利用内存来提高数据访问速度和查询性能。其中,数据缓存占据内存的...

    SQLServer中merge函数用法详解

    `Merge`函数是SQL Server 2008引入的一个强大的数据操纵语言(DML)关键字,它可以合并`Insert`、`Update`和`Delete`操作到一个单一的语句中,极大地提高了数据库维护的效率和代码的简洁性。在本文中,我们将深入...

    SQL_Server_2005_合并复制配置图解

    ### SQL Server 2005 合并复制配置详解 #### 一、配置分发 在进行合并复制之前,首先需要配置分发。这一步骤主要用于设置如何将数据分布到不同的数据库实例上,并且确定哪些数据可以被复制。具体操作步骤如下: 1...

    SQL Server Native Client 9.0~11.0(32位和64位).rar

    - 提供对SQL Server的变更数据捕获(Change Data Capture, CDC)和合并复制(Merge Replication)的支持。 4. **安全性**: - 支持集成Windows身份验证,增强了安全性,减少了密码管理的复杂性。 - 实现了SQL ...

    SQL SERVER间数据同步

    ### SQL Server 数据库间数据同步方法详解 #### 一、SQL Server 数据同步概述 SQL Server 数据同步是指在两台或多台 SQL Server 数据库之间保持数据一致性的过程。这对于分布式的数据库环境尤其重要,例如需要在...

    SQL Server Merger实现数据的同步

    本文旨在介绍一种更为简便的方法——利用SQL Server 2008新增的`MERGE`语句来实现数据同步与合并。 #### Merge语法介绍 在SQL Server 2008及更高版本中引入了`MERGE`语句,这一功能允许用户在一个语句中根据源表与...

    SQL Server使用Merge语句当源表数据集为空时,无法进行查询的问题

    在SQL Server中,`MERGE`语句是一种强大的工具,用于合并两个数据集,它可以实现插入、更新或删除操作。然而,当源表数据集为空时,`MERGE`语句可能不会按照预期的方式工作。这个问题在【标题】和【描述】中已经提到...

    【亲测可用】dbForge Studio 2022 for SQL Server Enterprise 6.3.9【官网最新版】

    添加了对 SQL Server 2022 CTP 2.1 的连接支持 添加了对 SQL Server 2022 的 CREATE INDEX 和 ALTER INDEX 的支持 添加了对 SQL Server 2022 的 CREATE CLUSTERED INDEX 的支持 添加了对 SQL Server 2022 的 CREATE ...

    rails配置sqlserver2000

    'sqlserver2000' => YAML.load(File.read(Rails.root.join('config', 'database.yml')))[Rails.env].merge( 'pool' => 5, 'timeout' => 5000 ) } config.active_record.default_connection_handler = ...

    一个命令发起Merge Request项目代码提交合并merge.sh

    程序员私藏的工具轻松实现项目开发一个命令发起Merge Request项目代码提交合并,可以指定代码Code View审核人。 不会用,随时私信作者。 最新git项目开发中一键发起merge request工具,自动识别本地环境,支持...

    Mysql和SQLserver区别.pdf

    在字符串和文本处理方面,SQLserver提供字符串合并函数如+操作符,而MySQL使用concat()函数。SQLserver还使用substr()或substring()来截取字符串,而MySQL使用substr()。 在索引方面,MySQL使用INDEX关键字创建索引...

    Microsoft SQL Server 保留关键字

    `MERGE` 是 SQL Server 2008 中引入的一个关键字,用于执行更复杂的合并操作。 #### 四、ODBC 与 SQL Server 保留关键字 开放式数据库连接 (ODBC) 是一个开放标准的应用程序编程接口 (API),用于与关系数据库管理...

    Pro SQL Server 2008 Replication pdf

    Pro SQL Server 2008 Replication is for Microsoft database developers and administrators who want to learn about the different types of replication and those best suited to SQL Server 2008. This book ...

    SQLServer 2008 Merge语句的OUTPUT功能

    在SQL Server 2008中,`MERGE`语句是一种非常强大的工具,它能够合并插入、更新和删除操作于一个单一的SQL语句之中,极大地提高了数据处理的效率和代码的简洁性。`OUTPUT`子句是`MERGE`语句的一个重要组成部分,它...

Global site tag (gtag.js) - Google Analytics