sqlserver中的列数据转换为字符串

coderee 2015-07-14 10:33:30
实现表中的按A字段汇总,B字段形成逗号隔开的字符串,有哪位知道该如何实现?
...全文
965 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
引用 5 楼 coderee 的回复:
declare @string varchar(100) set @string='' select @string=@string+','+cast(lch as varchar) from ww1.dbo.lsee select STUFF(@string,1,1,'') 这个只能实现单个字段的转换 游标如何写?
为啥要用游标写呢,游标的效率是比较低的
AcHerat 2015-07-14
  • 打赏
  • 举报
回复

create table tb(id int, value varchar(10))
insert into tb values(1, 'aa')
insert into tb values(1, 'bb')
insert into tb values(2, 'aaa')
insert into tb values(2, 'bbb')
insert into tb values(2, 'ccc')
go
declare @t table(id int,value varchar(100))--定义结果集表变量
--定义游标并进行合并处理
declare my_cursor cursor local for
select id , value from tb
declare @id_old int , @id int , @value varchar(10) , @s varchar(100)
open my_cursor
fetch my_cursor into @id , @value
select @id_old = @id , @s=''
while @@FETCH_STATUS = 0
begin
    if @id = @id_old
       select @s = @s + ',' + cast(@value as varchar)
    else
      begin
        insert @t values(@id_old , stuff(@s,1,1,''))
        select @s = ',' + cast(@value as varchar) , @id_old = @id
      end
    fetch my_cursor into @id , @value
END
insert @t values(@id_old , stuff(@s,1,1,''))
close my_cursor
deallocate my_cursor

select * from @t
drop table tb
coderee 2015-07-14
  • 打赏
  • 举报
回复
declare @string varchar(100) set @string='' select @string=@string+','+cast(lch as varchar) from ww1.dbo.lsee select STUFF(@string,1,1,'') 这个只能实现单个字段的转换 游标如何写?
AcHerat 2015-07-14
  • 打赏
  • 举报
回复
什么意思?单字段? select @str = isnull(@str + ',' , '') + cast(b as varchar) + ' | ' + cast(c as varchar) ... from tb where id = @id
AcHerat 2015-07-14
  • 打赏
  • 举报
回复

create table tb(id int, value varchar(10))
insert into tb values(1, 'aa')
insert into tb values(1, 'bb')
insert into tb values(2, 'aaa')
insert into tb values(2, 'bbb')
insert into tb values(2, 'ccc')
go

create function dbo.f_str(@id varchar(10)) returns varchar(1000)
as
begin
  declare @str varchar(1000)
  select @str = isnull(@str + ',' , '') + cast(value as varchar) from tb where id = @id
  return @str
end
go

--调用函数
select id , value = dbo.f_str(id) from tb group by id

drop function dbo.f_str
drop table tb
Tiger_Zhao 2015-07-14
  • 打赏
  • 举报
回复
只能自己写个函数:遍历以A字段为条件的游标,然后一个个地把B字段拼起来。
coderee 2015-07-14
  • 打赏
  • 举报
回复
sqlserver2000有办法吗?
AcHerat 2015-07-14
  • 打赏
  • 举报
回复
SQL版本如果是2005及其之上的,参考 xml 的应用, for xml path 的用法!

22,207

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧