日期:2014-05-17  浏览次数:20801 次

decode的结果能直接应用到该SQL的条件中吗?
有下面这样一个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 * 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……

效率差一倍呢。
------解决方案--------------------
恩,人不多.