求一条 处理效率高的 多级查询 且带运算的 sql语句解决办法

求一条 处理效率高的 多级查询 且带运算的 sql语句
虚拟表(kk)   1.  
select   cd1.cInvcode,   sum(cd1.iquantity)   as   SumNum
            from   inventory   cd0,currentstock   cd1   where   cd1.cInvcode   =   cd0.cInvcode
group   by   cd1.cInvcode
 
通过以上语句   得到   虚拟表(若命名别名为:kk)     中

kk.cInvCode,   kk.SumNum     这两个字段的内容

表2.   表   Inventory(别名为In)   中   的字段有   cInvCode,   iTopSum(上限数量),   iLowSum(下限数量),cInvName  

要求:
首先   当   虚拟表kk   和   表   Inventory   中的   (In.cInvCode=kk.cInvCode)字段相等时对应的记录的.

然后   在对应记录上   比较   In.iTopSum   <   kk.SumNum   <   In.iLowSum   (kk.SumNum   值在In.iTopSum   和   In.iLowSum   范围之外)
 
如果     kk.SumNum   >   In.iTopSum     求出(kk.SumNum   -   In.iTopSum)差值.
如果     kk.SumNum   <   In.iLowSum     求出(In.iLowSum   -   kk.SumNum)差值.


最后得到显示表的结果是:      

表的字段有:   |   cInvCode   |   cInvName   |   SumNum   |   iTopSum   |   iLowSum   |  

能不能通过   sql语句实现呢?

------解决方案--------------------
使用case when语句就可以,写个demo你看看修改一下就可以了


--测试数据
create table temp( cname varchar2(100),SumNum int,iTopSum int, iLowSum int )
insert into temp
select '12 ',50,100,30 from dual union all
select '1 ',150,100,30 from dual union all
select '2 ',20,100,30 from dual;
--执行查询
select cname,
case when SumNum > iTopSum then SumNum - iTopSum
when SumNum < iLowSum then iLowSum - SumNum
else SumNum
end SumNum
from temp;
--查询结果
12 50
1 50
2 10