解析SQL Server 2005 溢用之:合并列值
核心提示:很多人可能发现,不论是在sql 2000, 还是在 sql 2005 中,都没有提供字符串的聚合函数, 所以, 当我们在处理以下要求时,会比较麻烦, 但在 SQL Server 2005中, 这类情况得到了改良, 我们可以轻松地完成这项处理。
很多人可能发现,不论是在sql 2000, 还是在 sql 2005 中,都没有提供字符串的聚合函数, 所以, 当我们在处理以下要求时,会比较麻烦, 但在 SQL Server 2005中, 这类情况得到了改良, 我们可以轻松地完成这项处理。
题目描写:
不论是在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 |
1 2 下1页
核心提示:很多人可能发现,不论是在sql 2000, 还是在 sql 2005 中,都没有提供字符串的聚合函数, 所以, 当我们在处理以下要求时,会比较麻烦, 但在 SQL Server 2005中, 这类情况得到了改良, 我们可以轻松地完成这项处理。
2. 新的解决方法
示例数据
以下为援用的内容: DECLARE @t TABLE(id int, value varchar(10)) INSERT @t SELECT 1, 'aa' UNION ALL SELECT 1, 'bb' UNION ALL SELECT 2, 'aaa' UNION ALL SELECT 2, 'bbb' UNION 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 /*--结果 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中。
上1页 1 2 唐山网站建设www.fw8.netTAG:内容,函数,字符串,示例,麻烦
评论加载中...
|