问题描述:
无论是在sql 2000, 还是在 sql 2005 中,都没有提供字符串的聚合函数, 所以, 当我们在处理下列要求时,会比较麻烦:
有表tb, 如下:
id value
----- ------
1 aa
1 bb
2 aaa
2 bbb
2 ccc
需要得到结果:
id values
------ -----------
1 aa,bb
2 aaa,bbb,ccc
即, group by id, 求 value 的和(字符串相加)
-- 1. 创建处理函数
CREATE FUNCTION dbo.f_str(@id int)
RETURNS varchar(8000)
AS
BEGIN
DECLARE @r varchar(8000)
SET @r = ''
SELECT @r = @r + ',' + value
FROM tb
WHERE id=@id
RETURN STUFF(@r, 1, 1, '')
END
GO
-- 调用函数
SELECt id, values=dbo.f_str(id)
FROM tb
GROUP BY id
-- 示例数据
DECLARE @t TABLE(id int, value varchar(10))
INSERT @t SELECT 1, 'aa'
UNION ALL SELECT 1, 'bb'
<place w:st="on"><span lang="EN-US" style='font-size: 9pt; color: blue; font-family: "Courier New";'>UNION</span></place> ALL SELECT 2, 'aaa'
UNION ALL SELECT 2, 'bbb'
<place w:st="on"><span lang="EN-US" style='font-size: 9pt; color: blue; font-family: "Courier New";'>UNION</span></place> ALL SELECT 2, 'ccc'
-- 查询处理
SELECT *
FROM(
SELECT DISTINCT
id
FROM @t
)A
OUTER APPLY(
SELECT
[values]= STUFF(REPLACE(REPLACE(
(
SELECT value FROM @t N
WHERE id = A.id
FOR XML AUTO
), '<N value="', ','), '"/>', ''), 1, 1, '')
)N
/*--结果
id values
----------- ----------------
1 aa,bb
2 aaa,bbb,ccc
(2 行受影响)
--*/
附:合并与分拆的CLR, sql2005的示例中有:
在安装sql 2005的示例后,默认安装目录为 drive:\Program Files\Microsoft SQL Server\90\Samples\Engine\Programmability\CLR\StringUtilities中
Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=784287
分享到:
相关推荐
在本文中,我们将深入探讨如何在SQL Server 2005中合并列值,特别是针对描述中的示例。 首先,我们来看一下在SQL Server 2000中通常使用的旧方法。由于没有内置的字符串聚合函数,开发人员需要创建自定义的用户定义...
《Microsoft SQL Server 2005技术内幕:T-SQL查询的源代码》是一本深入探讨SQL Server 2005中T-SQL查询技术的专业书籍。T-SQL(Transact-SQL)是Microsoft SQL Server数据库管理系统中用于数据操作、查询、存储过程...
根据提供的信息,我们可以深入探讨如何在SQL中实现“合并列值”的操作,即如何将一个表中的多个相同或不同的值合并成一个单独的字符串。这种需求在数据处理、报告生成等场景中非常常见。 ### 合并列值 #### 标题与...
Microsoft SQL Server 2005技术内幕:T-SQL查询.part1
《Microsoft SQL Server 2005技术内幕:T-SQL查询》 《Microsoft SQL Server 2005技术内幕:T-SQL程序设计》 《Microsoft SQL Server 2005技术内幕:存储引擎》 《Microsoft SQL Server 2005技术内幕:查询、调整...
本笔记涵盖了 SQL Server 2005 技术内幕中 T-SQL 查询的前两章内容,主要介绍了逻辑查询处理、查询优化器、查询执行步骤、查询筛选器、聚合函数、子查询、别名的使用限制等知识点。 1.逻辑查询处理:SQL 是面向集合...
Microsoft SQL Server 2005技术内幕:T-SQL查询 中文
是Inside Microsoft SQL Server 2005系列书中的第一本,SQL Server类的顶尖之作 全球公认SQL Server 2005经典著作,囊括大量鲜为人知的技术内幕,大师智慧、专家经验尽览无余。 本系列图书中文版得到了微软...
使用`FOR XML PATH`实现列合并 `FOR XML PATH`是一种非常强大的工具,可以用来构建XML格式的数据,同时也可以用来构建普通的字符串。在SQL Server中,可以通过这种方式轻松地将多行数据转换为单行数据,实现列的...
《Microsoft SQL Server 2005技术内幕:T-SQL查询》 《Microsoft SQL Server 2005技术内幕:T-SQL程序设计》 《Microsoft SQL Server 2005技术内幕:存储引擎》 《Microsoft SQL Server 2005技术内幕:查询、调整...
——《Microsoft SQL Server 2005 技术内幕:T-SQL程序设计》、《Microsoft SQL Server 2005 技术内幕:T-SQL查询》、《Microsoft SQL Server 2005 技术内幕:查询、调整和优化》、《Microsoft SQL Server 2005 技术...
《Microsoft SQL Server 2005技术内幕:T-SQL查询》是一本深入解析SQL Server 2005中T-SQL查询语言的专业书籍。T-SQL(Transact-SQL)是微软对标准SQL的扩展,是SQL Server的核心组件,用于数据库管理、数据查询和...
Microsoft SQL Server 2005技术内幕: T-SQ程序设计 中文版本的 第一部分 第二部分地址:http://download.csdn.net/source/2680866
SQL Server 2005是微软推出的一款关系型数据库管理系统,具有强大的数据处理能力和高度的可扩展性。这个压缩包包含四本关于SQL Server 2005技术内幕的中文PDF书籍,涵盖了从基础到高级的各个层面,是学习和掌握SQL ...
本书是Inside Microsoft SQL Server 2005系列四本著作中的一本。它详细介绍了T-SQL的内部体系结构,包含了非常全面的编程参考,提供了使用Transact-SQL(T-SQL)的专家级指导,囊括了非常全面的编程参考,揭示了基于...
sql自定义函数,用于合并字符串列,可以在分组的情况下对varchar类型的字段合并
在SQL中,将多行数据合并为一行,尤其是在某一列进行字符串拼接,是一项常见的需求。这通常用于汇总数据、创建报表或者为了分析目的而整合信息。本文将深入探讨如何利用SQL实现多行数据的合并,特别关注字符串拼接的...
Microsoft SQL Server 2005技术内幕:T-SQL查询 pdf 中文版 1 第一部分 第二部分地址:http://download.csdn.net/source/2684248
8. **版本控制**:在团队协作环境中,使用版本控制系统如Git管理SQL脚本是很常见的,合并工具应该能与这些系统无缝集成,方便版本回溯和协同工作。 9. **安全性**:在处理敏感的数据库操作时,工具应遵循最佳安全...
Microsoft.Press.Inside.Microsoft.SQL.Server.2005.T-SQL.Querying