字段和数据类型大致如下,row字段不一定连续
d_rea,m_rea,lm_rea,y_rea,ly_rea,row,sign
22.00,123.00,55.00,100.00,101.00,1,+
-33.00,-123.01,-4.00,......,     1,-
14.00,22.00,.....................2,+.......要求: 取出相同行(row)的各项数据 进行符号(sign)运算,注意sign只能从第2行开始取,比如我取的是row=1的第1条数据,而我的符号row=1的第2条数据取,这里不知道如何更正,我的代码如下:
-----
declare cur_tmp cursor for 
select distinct row from ht_tmp_no_h
open cur_tmp
fetch next from cur_tmp into @row
while @@fetch_status=0
begin

--赋初值

set @d_rea_sum=0.00
set @m_rea_sum=0.00
set @lm_rea_sum=0.00
set @y_rea_sum=0.00
set @ly_rea_sum=0.00

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

解决方案 »

  1.   

    其中sign 取到了第row行的第1条sign 所以运算结果不正确,要从第row行第2条取符号
      

  2.   

    好象做不到 因为要逐条取 不是一个简单的求和 符号是由sign来决定的
      

  3.   

    declare @t table(d_rea decimal(19,2),m_rea decimal(19,2),lm_rea decimal(19,2),y_rea decimal(19,2),ly_rea decimal(19,2),row int,sign char(1))
    insert into @t select
    22.00,123.00,55.00,100.00,101.00,1,'+' union all select
    -33.00,-123.01,-4.00,null,null,1,'-' union all select
    14.00,22.00,null,null,null,2,'+'
    select 
    sum(case sign when '+' then isnull(d_rea,0) else -1*isnull(d_rea,0) end) d_rea,
    sum(case sign when '+' then isnull(m_rea,0) else -1*isnull(m_rea,0) end) m_rea,
    sum(case sign when '+' then isnull(lm_rea,0) else -1*isnull(lm_rea,0) end) lm_rea,
    sum(case sign when '+' then isnull(y_rea,0) else -1*isnull(y_rea,0) end) y_rea,
    sum(case sign when '+' then isnull(ly_rea,0) else -1*isnull(ly_rea,0) end) ly_rea,
    row
    from @t group by row
      

  4.   

    对不起 表达能力不是很好
    我的意思是:忽略每个row字段的第1条sign数据, 从第2条sign取符号(第1条sign符号全省略)
      

  5.   

    不好意思 zsforever(虎虎) 的不是我要的