有下面这样一个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  )除此之外还有没有什么办法呢?

解决方案 »

  1.   

    select * from(
     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……效率差一倍呢。
      

  2.   

    果然还是having 
    我就怀疑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 子句之后