虚拟表(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语句实现呢?

解决方案 »

  1.   

    使用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
      

  2.   

    select * from (
    select
    i.cInvCode,t.SumNum,i.iTopSum,i.iLowSum,
    case when t.SumNum > I.iTopSum  then t.SumNum - I.iTopSum  
         when t.SumNum < I.iLowSum  then 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
    ) as ZH where ZH.SumNum is not null 
    and ZH.SumNum not between ZH.iLowSum and ZH.iTopSum  我写的实现以上功能 的sql 语句.  麻烦大家帮改进一下,提高执行效率.