如何在group后,将一个字段中的数值不加,而是变成一个字符串往后面递增

kelly_leecn 2010-02-17 05:17:00
例如:有一个表m
jid no fid
1 1003 5
2 1003 6
3 1005 65
4 1006 81
5 1006 89

想通过类似这样一个语句实现
select ?(fid) from m group by no

no fid
1003 5,6
1005 65
1006 81,89
请问该如何处理?
...全文
58 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
百年树人 2010-02-17
  • 打赏
  • 举报
回复
引用 4 楼 kelly_leecn 的回复:
谢谢了,大哥,我像再麻烦问问;如果我要再增加一个字段,那么这个函数该如何写呢?比如
jid  no      fid    gid
1    1003    5      10
2    1003    6      20
3    1005    65      30
4    1006    81      40
5    1006    89      20

想得到的结果是
  no      fid  gid
1003    5,6    10,20
1005    65      30
1006    81,89    40,20
这个函数该如何写呢


写两个函数,方法同上(另起一个函数名称,把字段fid改为gid即可)
kelly_leecn 2010-02-17
  • 打赏
  • 举报
回复
谢谢了,大哥,我像再麻烦问问;如果我要再增加一个字段,那么这个函数该如何写呢?比如
jid no fid gid
1 1003 5 10
2 1003 6 20
3 1005 65 30
4 1006 81 40
5 1006 89 20

想得到的结果是
no fid gid
1003 5,6 10,20
1005 65 30
1006 81,89 40,20
这个函数该如何写呢
百年树人 2010-02-17
  • 打赏
  • 举报
回复
if object_id('[m]') is not null drop table [m]
go
create table [m]([jid] int,[no] int,[fid] int)
insert [m]
select 1,1003,5 union all
select 2,1003,6 union all
select 3,1005,65 union all
select 4,1006,81 union all
select 5,1006,89
go

create function f_str(@no varchar(20))
returns varchar(50)
as
begin
declare @s varchar(800)
select @s=isnull(@s+',','')+ltrim(fid)
from m
where no=@no
return @s
end
go

select no,dbo.f_str(no) as fid from m group by no

--测试结果:
/*
no fid
----------- --------------------------------------------------
1003 5,6
1005 65
1006 81,89

(所影响的行数为 3 行)
*/
kelly_leecn 2010-02-17
  • 打赏
  • 举报
回复
我用的是sql 2000,能不能用2000写一个函数,多谢
百年树人 2010-02-17
  • 打赏
  • 举报
回复
select 
no,
stuff((select ','+ltrim(fid) from m where no=t.no for xml path('')),1,1,'')
from
m t
group by no

以上适用于sql2005及以上的版本,sql2000用函数

34,873

社区成员

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

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