字符串聚合函数(去除重复值)_mssql数据库教程-查字典教程网
字符串聚合函数(去除重复值)
字符串聚合函数(去除重复值)
发布时间:2016-12-28 来源:查字典编辑
摘要:--功能:提供字符串的替代聚合函数--说明:例如,将下列数据--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

相关阅读
推荐文章
猜你喜欢
附近的人在看
推荐阅读
拓展阅读
  • 大家都在看
  • 小编推荐
  • 猜你喜欢
  • 最新mssql数据库学习
    热门mssql数据库学习
    编程开发子分类