手机
当前位置:查字典教程网 >编程开发 >mssql数据库 >字符串聚合函数(去除重复值)
字符串聚合函数(去除重复值)
摘要:--功能:提供字符串的替代聚合函数--说明:例如,将下列数据--test_idtest_value--------------------'...

--功能:提供字符串的替代聚合函数

--说明:例如,将下列数据

--test_id test_value

--------------------

'a' '01,03,04'

'a' '02,04'

'b' '03,04,08'

'b' '06,08,09'

'c' '09'

'c' '10'

--转换成test_vlaue列聚合后的函数,且聚合后的字符串中的值不重复

--test_id test_value

--------------------

'a' '01,03,04,02'

'b' '03,04,08,06,09'

'c' '09,10'

--代码-------------------------------------------GO

GO

if object_id(N'dbo.merge',N'FN') is not null

drop function dbo.merge

GO

--函数功能:字符串聚合及去除重复值

create function dbo.merge

(

@test_id varchar(50)

)

returns varchar(50)

as

begin

--字符串聚合-------------------------START

declare @s varchar(8000)

set @s = ''

select

@s = @s + test_value + ','

from test_a

where test_id = @test_id

--字符串聚合-------------------------END

--去除重复值-------------------------START

declare @value varchar(8000)--存储第一个逗号前的值

declare @result varchar(8000)--存储唯一值的中间字符串

set @result = ''

--有值的场合

while charindex(',',@s) <> 0

begin

--取第一个逗号前的值

set @value = left(@s,charindex(',',@s) -1)

--第一个逗号前的值没在结果中出现

if charindex(',' + @value + ',',',' + @result) = 0

begin

--加入中间字符串

set @result = @result + @value + ','

end

--去除第一个值以及后面的逗号(剔除法),继续循环判断

set @s = right(@s,(len(@s) - charindex(',',@s)))

end

set @s = @result

--去除重复值-------------------------END

return left(@s,len(@s)-1)

end

GO

if object_id(N'test_a',N'U') is not null

drop table test_a

GO

create table test_a

(

test_id varchar(50),

test_value varchar(50)

)

insert into test_a

select 'a','01,03,04' union all

select 'a','02,04' union all

select 'b','03,04,08' union all

select 'b','06,08,09' union all

select 'c','09' union all

select 'c','10'

select

test_id,

test_value = dbo.merge(test_id)

from test_a

group by test_id

【字符串聚合函数(去除重复值)】相关文章:

SqlServer 2005 中字符函数的应用

MSSQL汉字转拼音函数实现语句

删除重复记录

主键和聚集索引和单列索引和多列索引

和表值函数连接引发的性能问题分析

sql中返回参数的值

删除SQL Server数据中指定的重复记录

SQLServer中求两个字符串的交集

SQL字符串处理函数总结

例说SQLServer2008聚合函数

精品推荐
分类导航