在线求解,如何合并多行结果

rottenapple 2009-03-18 10:32:24
比如查询结果如下:
Col1, Col2
China,A
China,B
China,C

我想输出一条结果为China,"A,B,C",用SQL怎么实现呢?
...全文
154 12 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
dawugui 2009-03-18
  • 打赏
  • 举报
回复
11楼这个行.
htl258_Tony 2009-03-18
  • 打赏
  • 举报
回复
不好意思,没看好,原来不全,我发个参考的.
/*
标题:按某字段合并字符串之一(简单合并)
作者:爱新觉罗.毓华(十八年风雨,守得冰山雪莲花开)
时间:2008-11-06
地点:广东深圳

描述:将如下形式的数据按id字段合并value字段。
id value
----- ------
1 aa
1 bb
2 aaa
2 bbb
2 ccc
需要得到结果:
id value
------ -----------
1 aa,bb
2 aaa,bbb,ccc
即:group by id, 求 value 的和(字符串相加)
*/
--1、sql2000中只能用自定义的函数解决
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 int) returns varchar(100)
as
begin
declare @str varchar(1000)
set @str = ''
select @str = @str + ',' + cast(value as varchar) from tb where id = @id
set @str = right(@str , len(@str) - 1)
return @str
end
go

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

drop function dbo.f_str
drop table tb


htl258_Tony 2009-03-18
  • 打赏
  • 举报
回复
declare @sql varchar(100)
set @sql=''
select @sql=@sql+','+Col2 from tb where Col1='China'
exec(@sql)
帮补一下
ws_hgo 2009-03-18
  • 打赏
  • 举报
回复
这部分是核心
ws_hgo 2009-03-18
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 rottenapple 的回复:]
楼上的,当我创建function时候,提示col1处有语法错误

1楼的,我要的是动态的,不是静态的
[/Quote]
declare @sql varchar(100)
set @sql=''
select @sql=@sql+','+Col2 from tb where Col1='China'
这个是动态的
rottenapple 2009-03-18
  • 打赏
  • 举报
回复
create function f_test(@col1 varchar(100))
returns varchar(8000)
as
begin
declare @ret varchar(8000)
set @ret = ''
select @ret=@ret+col2+',' from tb where col1 = @col1
return @ret
end

go

select col1,dbo.f_test(col1) from tb
group by col1


正解如此
rottenapple 2009-03-18
  • 打赏
  • 举报
回复
少了一个@,
谢谢了
rottenapple 2009-03-18
  • 打赏
  • 举报
回复
楼上的,当我创建function时候,提示col1处有语法错误

1楼的,我要的是动态的,不是静态的
ks_reny 2009-03-18
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 jinjazz 的回复:]
自定义聚合函数


SQL codecreate function f_test(col1 varchar(100))
returns varchar(8000)
as
begin
declare @ret varchar(8000)
set @ret = ''
select @ret=@ret+col2+',' from tb
return @ret
end

go

select col1,dbo.f_test(col1) from tb
group by col1
[/Quote]
顶。正解。
jinjazz 2009-03-18
  • 打赏
  • 举报
回复
自定义聚合函数

create function f_test(col1 varchar(100))
returns varchar(8000)
as
begin
declare @ret varchar(8000)
set @ret = ''
select @ret=@ret+col2+',' from tb
return @ret
end

go

select col1,dbo.f_test(col1) from tb
group by col1
ws_hgo 2009-03-18
  • 打赏
  • 举报
回复
LZ
注意结贴速度
ws_hgo 2009-03-18
  • 打赏
  • 举报
回复
Col1, Col2
China,A
China,B
China,C
declare @sql varchar(100)
set @sql=''
select @sql=@sql+','+Col2 from tb where Col1='China'

34,838

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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