日期:2014-05-18  浏览次数:20513 次

求一条 处理效率高的 多级查询 且带运算的 sql语句
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     这两个字段的内容

表的字段有:   |   kk.cInvCode   |   kk.SumNum   |


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

iLowSum(下线数量),cInvName  

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

的记录时的:

比较     kk.SumNum   和   iTopSum(上限数量),   iLowSum(下线数量)   的差值
,条件   a,b   满足其中一个条件.
a:如果:     kk.SumNum   >   In.iTopSum     得到:   (kk.SumNum   -   In.iTopSum)   的值;
b:如果:     kk.SumNum   <   In.iLowSum     得到:   (In.iLowSum   -   kk.SumNum)   的值;

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

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

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


------解决方案--------------------
描述得太乱
select
i.cInvCode,i.cInvName,t.SumNum,i.iTopSum,i.iLowSum,
case when t.SumNum > I.iTopSum then t.SumNum - I.iTopSumor else i.iLowSum-t.SumNum end as 差值
from Inventory i,
(
select cd1.cInvcode, sum(cd1.iquantity) as SumNum
from inventory cd0,currentstock cd1 where cd1.cInvcode =
cd0.cInvcode
group by cd1.cInvcode
) as t
where i.cInvCode=t.cInvCode
and t.SumNum > I.iTopSum or t.SumNum < i.iLowSum)