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
……,--这里省略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
decode(-1,0,1,0) ==> 0
max(0) ==>0
我不是from result而是from test,和之前有没有插入过ssoc=1没有关系吧,而且每次做insert前都会清空result表。
问题应该出在这里
如果ssoc<100,sign(ssoc-100)=-1,decode()=0;
如果ssoc>100,sign(ssoc-100)=1,decode()=0;这个理解应该没有错吧?
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的判断,就是上面[...]中的部分。
会不会是insert进结果表的时候有些什么转换把数据给丢了呢?