求SQL,不用游标该如何写...

[复制链接]
查看11 | 回复7 | 2013-1-17 12:18:56 | 显示全部楼层 |阅读模式





如下表,有三条数据:
F1F2F3
1 1001
2 2002
3 3003
我欲实现把上表的所有记录的F3字段的值进行相加,
结果应如下:
F1F2F3
1 1001002003
2 2001002003
3 3001002003
如果不拥游标,该如何实现?





回复

使用道具 举报

千问 | 2013-1-17 12:18:56 | 显示全部楼层
可以写个函数,把F3的值相加了然后再把这个值赋给每个编号就可以了
回复

使用道具 举报

千问 | 2013-1-17 12:18:56 | 显示全部楼层
不妨您详细说说,俺对写函数没有研究,如何用呀?
回复

使用道具 举报

千问 | 2013-1-17 12:18:56 | 显示全部楼层
函数的内容该如何写呢
回复

使用道具 举报

千问 | 2013-1-17 12:18:56 | 显示全部楼层
--合并函数
create function f_merg(@content int)
returns varchar(8000)
as
begin
declare @str varchar(8000)
set @str=''
select @str=@str+','+rtrim(contect) from Mytable where ID=@content
select @str=right(@str,len(@str)-1)
return @str
end
go
--调用:
select ID,contect=dbo.f_merg(ID) from Mytable group by id
/*说明
因为SQL中,字符串的最长长度为8000,所以如果相同id的contect太多的话,会出现显示不完的情况.
*/
回复

使用道具 举报

千问 | 2013-1-17 12:18:56 | 显示全部楼层
我开始想直接在sql 文中来实现,试验了好久也没搞定,按楼上小哥的方法,轻松搞定了,谢谢。
但在调用f_merg(ID)必须有dbo的权限吗?如果我不具有dbo的权限该怎么办?
回复

使用道具 举报

千问 | 2013-1-17 12:18:56 | 显示全部楼层
再顶一下
回复

使用道具 举报

千问 | 2013-1-17 12:18:56 | 显示全部楼层
为什么要
where ID=@content
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行