有下面这样一个SQL,
select a……....
decode (a.flage, 1,sum(a.a1),2.sum(a.a2),3,sum(a.a3)) as aaa
from a
where a…..
group by a……
现在的问题是,我想把decode的结果也应用到条件中去,比如decode的结果不为0的部分才输出。对于这样的要求有没有什么办法呢?显然,直接在条件中写下:
and aaa != 0
这样的条件好象不行。
我想用having 好像having也不行,
比如 having (aaa != 0 )除此之外还有没有什么办法呢?
select a……....
decode (a.flage, 1,sum(a.a1),2.sum(a.a2),3,sum(a.a3)) as aaa
from a
where a…..
group by a……
现在的问题是,我想把decode的结果也应用到条件中去,比如decode的结果不为0的部分才输出。对于这样的要求有没有什么办法呢?显然,直接在条件中写下:
and aaa != 0
这样的条件好象不行。
我想用having 好像having也不行,
比如 having (aaa != 0 )除此之外还有没有什么办法呢?
select a……....
decode (a.flage, 1,sum(a.a1),2.sum(a.a2),3,sum(a.a3)) as aaa
from a ) t
where t.aaa != 0
group by t.a……不过这么写的话还不如直接写select a……....
decode (a.flage, 1,sum(a.a1),2.sum(a.a2),3,sum(a.a3)) as aaa
from a
where decode (a.flage, 1,sum(a.a1),2.sum(a.a2),3,sum(a.a3)) != 0
group by a……效率差一倍呢。
我就怀疑having 可以,果然可以。结果是
select a……....
from a
where a…..
having decode (a.flage, 1,sum(a.a1),2.sum(a.a2),3,sum(a.a3)) as aaa != 0group by a……
现在的问题是,这样做了之后,效率变得很低,不知道是不是必然原因。
有谁知道效率变低的原因吗?
当把 decode 放在 having 子句之后