欢迎您访问我爱IT技术网,今天小编为你分享的编程技术是:【解析SQL Server 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 |
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 value="', ','), '"/>', ''), 1, 1, '') )N |
注: 合并与分拆的CLR, sql2005的示例中有:
在安装sql 2005的示例后,默认安装目录为 drive:\Program Files\Microsoft SQL Server\90\Samples\Engine\Programmability\CLR\StringUtilities中。
以上所分享的是关于解析SQL Server 2005 溢用之:合并列值,下面是编辑为你推荐的有价值的用户互动:
相关问题:SQL Server如何将Id相同的字段合并,并且以逗号隔开
答:需要用到stuff函数: 例: id name 1 张三 1 李四 2 王五 2 赵六结果: Id name 1 张三,李四 2 王五,赵六 创建测试表及插入数据: create table test(id int,name varchar(10))insert into test values (1,' 张三')insert into test values (1... >>详细
相关问题:在SQL Server2005 数据库中如果让一列的值等于前几...
答:第一步:先建一个 表格 三个字段的 比如 id ,count1,count2 第二步:新建试图 把这个表加进来 再加一个 列 sum ,然后 sum=count1+count2; 第三步:访问数据时候 访问 试图就 ok >>详细
相关问题:sqlserver2005,sql语句循环查询,合并结果集
答:你可以使用n1 in (4072,4073,.....)或者将数据放在某个表里,用 n1 in (select xx from...),这样语句就大大简化了,每个字段需要一个查询。 如果字段太多,那么去看看MSSQL的全文检索吧。 >>详细
- 评论列表(网友评论仅供网友表达个人看法,并不表明本站同意其观点或证实其描述)
-
