select 
……,--这里省略82个字段
max(decode(sign(ssoc-100),0,1,0)) ssoc,
……--这里省略159个字段
from test
where a=123 and b=5
这句运行出来的结果中,ssoc=1但是,如果把上面这句的结果insert到一个结果表中,则ssoc=0,真见鬼了!
insert into result
select 
……,--这里省略82个字段
max(decode(sign(ssoc-100),0,1,0)) ssoc,
……--这里省略159个字段
from test
where a=123 and b=5
这句运行完后在select * from result,结果ssoc=0

解决方案 »

  1.   

    insert ssoc =1 into  result table and then  for  max(decode(sign(ssoc-100),0,1,0)) ssoc,sign(ssoc-100) ==> -1
    decode(-1,0,1,0) ==> 0
    max(0) ==>0
      

  2.   

    楼上似乎不太对吧?
    我不是from result而是from test,和之前有没有插入过ssoc=1没有关系吧,而且每次做insert前都会清空result表。
      

  3.   

    谈谈你对DECODE和SIGN的理解~
    问题应该出在这里
      

  4.   

    decode(sign(ssoc-100),0,1,0)如果ssoc=100,sign(ssoc-100)=0,decode()=1;
    如果ssoc<100,sign(ssoc-100)=-1,decode()=0;
    如果ssoc>100,sign(ssoc-100)=1,decode()=0;这个理解应该没有错吧?
      

  5.   

    decode函数的意义应该是这样的。
    decode(value,if equals value1,than value2,if equals value3,than value4,...,[valuen]);
    如上面的表达式,转化成编程语言如下:
    if(value == value1)
    {
          输出value2;
    }
    else if (value == value3)
    {
          输出value4;
    }
    ...
    [
    else
    {
          输出 valuen;
    }
    ]
    首先,decode的第一个参数是你要比较的变量,然后才是一系列的条件值与结论值,当参数的个数为奇数的时候,说明你已列出所有的if条件,没有例外情况,如果参数个数为偶数,说明你还有一个else的判断,就是上面[...]中的部分。
      

  6.   

    我想错误不是出在decode和sign上吧?同一句SQL,select出来看那个字段=1,如果insert到另一个表则变成了0.
    会不会是insert进结果表的时候有些什么转换把数据给丢了呢?