`

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袖珍参考手册(第3版)

    - **数据合并**: 使用MERGE语句合并数据。 - **空值处理**: 如NULL的使用及其特殊处理方式。 - **数值转换**: 在不同的数据库系统中如何进行数值类型的转换。 - **数值/数学函数**: 包括基本的数学运算函数。 - **...

    数据库(SQL ORCAl)参考手册

    - **字符串串联运算符**:如`||`用于连接字符串。 - **一元运算符**:如正号(+)、负号(-)等。 - **运算符优先级**:定义了运算符执行的顺序。 #### 数据定义语言(DDL) - **创建数据库**:创建新的数据库,...

    Integration Services Samples

    例如,Derived Column Transformation用于添加、修改或删除列,Lookup Transformation用于查找匹配值,Aggregate Transformation用于对数据进行统计汇总,以及Merge Join Transformation用于合并两个数据流等。...

    introduction to R

    - **数据库**:通过ODBC接口连接到SQL Server、MySQL等数据库系统。 - **其他格式**:如SPSS、SAS等文件格式,可以通过`foreign`包进行读取。 #### 七、数据操作 - **向量和矩阵索引**:使用方括号`[]`来提取子集...

    SAS_Programming_Skills

    - **使用函数**:SAS提供了丰富的内置函数,如数学函数、字符串处理函数等,可用于创建复杂的变量。 #### 六、SAS运算符和函数 SAS支持多种运算符和函数,包括但不限于: - **算术运算符**:+、-、*、/、**(幂)...

Global site tag (gtag.js) - Google Analytics