读书人

帮忙修改一个存储过程的函数 高人

发布时间: 2012-08-17 02:08:34 作者: rapoo

帮忙修改一个存储过程的函数 在线等高人
下午问过一次 可能没说清楚 没得到好的答案 现在重新开贴问一次
ALTER FUNCTION [dbo].[GetHistory]
(
@IssueNum int,@Name varchar(100),@NumSum int,@Result varchar(50),@History varchar(100)
)
RETURNS varchar(1024)
AS
BEGIN
DECLARE @tempID int
select top 1 @tempID=IssueNum from NumsData where IssueNum<@IssueNum and [Name]=@Name and NumSum =@NumSum and Result=@Result and History=@History order by IssueNum desc
set @History=''
if @tempID>0
begin
select top 3 @History=@History+R1 from NumsData where IssueNum<=@tempID and [Name]=@Name order by IssueNum desc
end
return @History
END

比如 编号是118的数据 根据这个条件IssueNum<@IssueNum and [Name]=@Name and NumSum =@NumSum and Result=@Result and History=@History order by IssueNum desc
搜索到了一条编号为089的数据
现在的返回值是@History=@History+R1 也就是返回的是 118 117 116的R1的值
而我需要得到的返回值是089后面三条数据 也就是090 091 092 三条数据R1字段的值
比如三个值分别是 好 孬 好
那我需要得到的@History返回值就是:好孬好 这样一个数据

[解决办法]

SQL code
--看下是不是你要的结果select top 3 @History=@History+R1 from NumsData where IssueNum>@tempID and [Name]=@Name order by IssueNum asc
[解决办法]
探讨
直接改升序应该不行 这样得到的应该是 119 120 121 的R1 数据库里118已经是最后一条数据了
我要的是找到的符合条件的那条数据的后面三个R1 也就是090 091 092 三条数据R1字段的值

[解决办法]
探讨

引用:
哦,明确一下。假如089 后面有一个090 但后面没有091 ,接下来有092 093 094
你要的是092 093 094的三条记录中R1字段的拼接值是吗?



不是的 如果没有091 那这条数据就不要了
只需要 090 091 092 就是089后面三条的R1的字段拼接 中间不能有数据间隔

[解决办法]
刚才想了想这个思路不对!!!inner join的应该是后三个连续的编号,而我判断的他是否三个连续的编号!!
不应该是inner Join !!方便留下QQ吗?帮你解决一下,这样回复太慢了

读书人网 >SQL Server

热点推荐