问题如下:
如何将@sign从@row+1行开始取的数据 ,而不是第row行 谢谢!
代码如下:
declare tmp cursor for 
select isnull(d_rea,0.00),isnull(m_rea,0.00),isnull(lm_rea,0.00),isnull(y_rea,0.00),isnull(ly_rea,0.00), sign 
from ht_tmp_no_h where row=@row
open tmp

fetch next from tmp into @d_rea,@m_rea,@lm_rea,@y_rea,@ly_rea,@sign
while @@fetch_status=0
begin
         ...........
............
fetch next from tmp into @d_rea,@m_rea,@lm_rea,@y_rea,@ly_rea,@sign end

close tmp
deallocate tmp 

解决方案 »

  1.   

    select isnull(d_rea,0.00),isnull(m_rea,0.00),isnull(lm_rea,0.00),isnull(y_rea,0.00),isnull(ly_rea,0.00), (select sign from ht_tmp_no_h where row=@row+1) as sign
    from ht_tmp_no_h where row=@row
      

  2.   

    sigh=(select sign from ht_tmp_no_h where row=@row+1)
      

  3.   

    declare tmp cursor for 
    select isnull(d_rea,0.00),isnull(m_rea,0.00),isnull(lm_rea,0.00),i
                   snull(y_rea,0.00),isnull(ly_rea,0.00), sign 
    from ht_tmp_no_h where row=@row
    open tmp

    fetch next from tmp into @d_rea,@m_rea,@lm_rea,@y_rea,@ly_rea,@sign
    while @@fetch_status=0
    begin                         --交换上来即可
              fetch next from tmp into @d_rea,@m_rea,@lm_rea,@y_rea,@ly_rea,@sign 
              ...........
      ............  end

    close tmp
    deallocate tmp
      

  4.   

    declare tmp cursor for 
    select isnull(d_rea,0.00),isnull(m_rea,0.00),isnull(lm_rea,0.00),isnull(y_rea,0.00),isnull(ly_rea,0.00), sign 
    from ht_tmp_no_h where row=@row
    open tmp

    fetch next from tmp into @d_rea,@m_rea,@lm_rea,@y_rea,@ly_rea,@sign
    while @@fetch_status=0
    begin
            
    fetch next from tmp into @d_rea,@m_rea,@lm_rea,@y_rea,@ly_rea,@sign  --先推进游标然后再做处理就可以了         ...........
    ............
    end

    close tmp
    deallocate tmp
      

  5.   

    谢谢各位 不过还是答不到要求,我的意思是:
    @d_rea,@m_rea,@lm_rea,@y_rea,@ly_rea这些变量从第@row行开始取数据
    @sign则从第@row+1行开始取数据
      

  6.   

    用嵌套吧
    declare tmp cursor for 
    select isnull(d_rea,0.00),isnull(m_rea,0.00),isnull(lm_rea,0.00),isnull(y_rea,0.00),isnull(ly_rea,0.00)
    from ht_tmp_no_h where row=@row
    open tmp

    fetch next from tmp into @d_rea,@m_rea,@lm_rea,@y_rea,@ly_rea,@sign
    while @@fetch_status=0
    begin              declare tmp_sign cursor for 
          select sign 
          from ht_tmp_no_h where row=@row+1
                  open tmp_sign

          fetch next from tmp_sign into @sign
          while @@fetch_status=0
          begin               ...........
           ............
                  fetch next from tmp into @d_rea,@m_rea,@lm_rea,@y_rea,@ly_rea,@sign              end

          close tmp_sign
          deallocate tmp_sign          ...........
    ............
    fetch next from tmp into @d_rea,@m_rea,@lm_rea,@y_rea,@ly_rea,@sign end

    close tmp
    deallocate tmp 
    看看行不?
      

  7.   

    --再定一 一组变量
    declare @d_rea_1 nvarchar(50)
    declare @m_rea_1 nvarchar(50)
    declare @lm_rea_1 nvarchar(50)
    declare @y_rea_1  nvarchar(50)
    declare @ly_rea_1 nvarchar(50)
    declare @sign_1 nvarchar(50)
    declare tmp cursor for 
    select isnull(d_rea,0.00),isnull(m_rea,0.00),isnull(lm_rea,0.00),isnull(y_rea,0.00),isnull(ly_rea,0.00), sign 
    from ht_tmp_no_h where row=@row
    open tmp
    --@sign_1 占位
    fetch next from tmp into @d_rea,@m_rea,@lm_rea,@y_rea,@ly_rea,@sign_1
    while @@fetch_status=0
    begin
            --把sign 付给@sign,其他字段没有
    fetch next from tmp into @d_rea_1,@m_rea_1,@lm_rea_1,@y_rea_1,@ly_rea_1,@sign
            --下面是你的处理操作
            ...........
    ............ end

    close tmp
    deallocate tmp 

    这样行不行
      

  8.   

    ---那看看这样可以麽declare tmp cursor for 
    select isnull(d_rea,0.00),isnull(m_rea,0.00),isnull(lm_rea,0.00),isnull(y_rea,0.00),isnull(ly_rea,0.00)
    from ht_tmp_no_h 
    where row=@row
    open tmp

    fetch next from tmp into @d_rea,@m_rea,@lm_rea,@y_rea,@ly_rea
    while @@fetch_status=0
    begin              declare tmp1 cursor for 
          select [sign] 
          from ht_tmp_no_h 
          where d_rea=@d_rea and m_rea=@m_rea and lm_rea=@lm_rea and y_rea=@y_rea and ly_rea=@ly_rea              open tmp1

          fetch next from tmp1 into @sign
          while @@fetch_status=0
          begin                ...........
            ............
                   fetch next from tmp1 into @sign              end

          close tmp1
          deallocate tmp1         ...........
    ............
    fetch next from tmp into @d_rea,@m_rea,@lm_rea,@y_rea,@ly_rea end

    close tmp
    deallocate tmp 
      

  9.   

    zp_cool() ( ) 信誉:100    Blog   加为好友  2007-04-23 09:42:44  得分: 0  
     
     
       谢谢各位 不过还是答不到要求,我的意思是:
    @d_rea,@m_rea,@lm_rea,@y_rea,@ly_rea这些变量从第@row行开始取数据
    @sign则从第@row+1行开始取数据
      
     ------------------------------------------------------------------------
    那到最後一條紀錄怎麼办?@sign就沒有值了
      

  10.   

    leo_lesley(leo) 运行起来速度太慢了 谢谢 数据也不对
      

  11.   

    程序大致如下:
    declare tmp cursor for 
    select isnull(d_rea,0.00),isnull(m_rea,0.00),isnull(lm_rea,0.00),isnull(y_rea,0.00),isnull(ly_rea,0.00),sign
    from ht_tmp_no_h where row=@row
    open tmp

    fetch next from tmp into @d_rea,@m_rea,@lm_rea,@y_rea,@ly_rea,@sign
    while @@fetch_status=0
    begin



    select @d_rea_sum =
    (CASE
    WHEN @sign='+'  THEN @d_rea_sum +@d_rea
    WHEN @sign='-'   THEN @d_rea_sum-@d_rea
    WHEN @sign='*'  THEN @d_rea_sum*@d_rea
    WHEN @sign='/'  THEN @d_rea_sum/@d_rea
    END)

    .........
    if @ly_rea_sum>0 
    set @r_rea= @y_rea_sum/@ly_rea_sum -1 else
    set @r_rea=0.00


    fetch next from tmp into @d_rea,@m_rea,@lm_rea,@y_rea,@ly_rea,@sign end

    close tmp
    deallocate tmp 
    --------将第@row行数据插入到ht_check_report_all_test表中
    print @d_rea_sum

    update ht_check_report_all_test
    set d_rea=@d_rea_sum,m_rea=@m_rea_sum,lm_rea=@lm_rea_sum,y_rea=@y_rea_sum,ly_rea=@ly_rea_sum,r_rea=@r_rea
    from ht_check_report_all_test
    where sign =@row

    fetch next from cur_tmp into @row

    endclose cur_tmp
    deallocate cur_tmp
    --select row,dbo.f1(1) from ht_tmp_no_h where row=@row
    GO
      

  12.   


    zp_cool() 写的SQL应该可以,可能是因为变量所以会出错,看这样行不行?select isnull(ht_tmp_no_h.d_rea,0.00),isnull(ht_tmp_no_h.m_rea,0.00),isnull(ht_tmp_no_h.lm_rea,0.00),isnull(ht_tmp_no_h.y_rea,0.00),isnull(ht_tmp_no_h.ly_rea,0.00), httmp.sign  as sign
    from ht_tmp_no_h inner join ht_tmp_no_h httmp  on ht_tmp_no_h.row+1=httmp.row  where ht_tmp_no_h.row=@row
      

  13.   

    就是说第sign如何改成从第row+1行开始取数据,而不是从第row行开始取
      

  14.   

    ---你可以看看这个例子,是不是你要的形式
    http://community.csdn.net/Expert/topic/5476/5476783.xml?temp=.4725
      

  15.   

    lwl0606() 还是不行 很抱歉
      

  16.   

    SunHome_Java(XXX)括号里的东东怎么弄谁能告诉我