日期:2014-05-18  浏览次数:20285 次

帮忙修改一个存储过程的函数 在线等高人
下午问过一次 可能没说清楚 没得到好的答案 现在重新开贴问一次  
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吗?帮你解决一下,这样回复太慢了