一表有如下数据
id name
1 aaa
2 bbb
3 aaa
4 ccc
5 aaa
6 bbb将name重复的id合并起来,结果如下:
id name
1+3+5 aaa
2+6 bbb
4 ccc
如果id重复一次很好实现,但现在id重复次数未知。
只使用查询语句,不用游标和循环,能实现吗?(不好意思,只够给10分~-~)
id name
1 aaa
2 bbb
3 aaa
4 ccc
5 aaa
6 bbb将name重复的id合并起来,结果如下:
id name
1+3+5 aaa
2+6 bbb
4 ccc
如果id重复一次很好实现,但现在id重复次数未知。
只使用查询语句,不用游标和循环,能实现吗?(不好意思,只够给10分~-~)
create function f(@id varchar(100))
returns varchar(8000)
begin
declare @str varchar(8000)
set @str=''
select @str=@str+'+'+cast(id as varchar) from 表 where [name]=@id
set @str=stuff(@str,1,1,'')
return @str
endselect dbo.f([name]),[name] from 表 group by [name]
create function dbo.uf_getstr(@name varchar(10))
returns varchar(8000)
as
begin
declare @str varchar(8000)
set @str=''
select @str=@str+'+'+rtrim(id) from 表1 where name=@name
set @str=stuff(@str,1,1,'')
return @str
end
go
select distinct dbo.uf_getstr(name) as id,name from 表
insert tab
select 1,'aaa'
union select 2,'bbb'
union select 3,'aaa'
union select 4,'ccc'
union select 5,'aaa'
union select 6,'bbb'gocreate function f(@id varchar(100))
returns varchar(8000)
begin
declare @str varchar(8000)
set @str=''
select @str=@str+'+'+cast(id as varchar) from tab where [name]=@id
set @str=stuff(@str,1,1,'')
return @str
end
go
select dbo.f([name]),[name] from tab group by [name]go
drop function f
drop table tab
if object_id('你的表') is not null
drop table 你的表
go
create table 你的表(id int,name varchar(10))
insert 你的表 select 1,'aaa'
union all select 2,'bbb'
union all select 3,'aaa'
union all select 4,'ccc'
union all select 5,'aaa'
union all select 6,'bbb'
---查看测试数据
select * from 你的表
---创建函数
create function dbo.fn_mergeid(@name varchar(10))
returns varchar(8000)
as
begin
declare @sql varchar(1000)
set @sql=''
select @sql=@sql+'+'+cast([id] as varchar) from 你的表 where name=@name
return stuff(@sql,1,1,'')
end
go
---查看结果
select dbo.fn_mergeid(name) as id,name from 你的表 group by name /*
id name
------ ----------
1+3+5 aaa
2+6 bbb
4 ccc(所影响的行数为 3 行)
*/