问题描述:
无论是在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"; mso-font-kerning: 0pt; mso-no-proof: yes'>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"; mso-font-kerning: 0pt; mso-no-proof: yes'>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中
分享到:
相关推荐
很多人可能发现,无论是在sql 2000,还是在sql 2005 中,都没有提供字符串的聚合函数,所以,当我们在处理下列要求时,会比较麻烦,但在SQL Server 2005中,这种情况得到了改善,本文介绍了在SQL Server 2005中完成...
Microsoft SQL Server 2005技术内幕:T-SQL查询的源代码,主要是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技术内幕:查询、调整...
它提供了使用Transact-SQL(T-SQL)的专家级指导,T-SQL是用于SQL Server的最常见的也是功能最强大的编程语言。该书由Itzik Ben-Gan权威执笔,重点关注语言特性以及它们如何被SQL Server引擎解释和处理。 通过...
Microsoft SQL Server 2005技术内幕:T-SQL查询
Microsoft SQL Server 2005技术内幕:T-SQL查询 中文
Microsoft SQL Server 2005技术内幕:T-SQL查询 pdf 中文版 第二部分 第一部分地址:http://download.csdn.net/source/2684220
是Inside Microsoft SQL Server 2005系列书中的第一本,SQL Server类的顶尖之作 全球公认SQL Server 2005经典著作,囊括大量鲜为人知的技术内幕,大师智慧、专家经验尽览无余。 本系列图书中文版得到了微软...
Microsoft SQL Server 2005技术内幕:存储引擎(中文)
Microsoft SQL Server 2005技术内幕:T-SQL查询,经典书籍,上传受限,所以分开两个文件
本书是Inside Microsoft SQL Server 2000的作者Kalen Delaney的又一经典著作,是Inside Microsoft SQL Server 2005系列四本著作中的一本。本书对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程序设计》、《Microsoft SQL Server 2005 技术内幕:T-SQL查询》、《Microsoft SQL Server 2005 技术内幕:查询、调整和优化》、《Microsoft SQL Server 2005 技术...
包括了《Microsoft SQL Server 2005技术内幕》四本书的全部内容,不过都是英文版的哈,哪位要是有中文的还希望分享下哈 《Microsoft SQL Server 2005技术内幕:查询与优化》 《Microsoft SQL Server 2005技术内幕:...
它提供了使用transact-sql(t-sql)的专家级指导,t-sql是用于sql server的最常见的也是功能最强大的编程语言。该书由itzik ben-gan权威执笔,重点关注语言特性以及它们如何被sql server引擎解释和处理。 通过本书...