子查询 - 没有信心

时间:2014-02-11 11:27:53

标签: oracle oracle11g

我试图获得供应商的银行发送至地址编号的输出,其中供应商/供应商现在是前供应商,但这些供应商的银行发送Tos中的一些也被其他仍然有效的供应商使用。所以我要以某种方式将后者从前者中删除。条件是A / B不应该来自供应商的发送至,供应商的发送至不应为0.

SuppbankAB  =       Supplier’s send-To address no 
SuppAB =            Supplier’s address book no 
Suppstatus =        Supplier’s status as a vendor 
ExV =               Ex vendor/supplier
V=                  Valid vendor/supplier

不知怎的,我不确定这是否正确。

  select SuppbankAB,SuppAB, Suppstatus 
  from ABTABLE
  where SuppbankAB <> SuppAB 
   and SuppbankAB <> 0 
   and Suppstatus = 'ExV' 
   and SuppbankAB not in
       (select SuppbankAB 
        from ABTABLE
        where SuppbankAB <> SuppAB
          and SuppbankAB <> 0
          and Suppstatus <> 'ExV');

感谢您的提前帮助

2 个答案:

答案 0 :(得分:0)

对我来说很好看。只是,您可能想要考虑一下,如果您真的想将子选择限制为SuppbankAB&lt;&gt; SuppAB。我想你可能会跳过你想在结果中排​​除的地址。

答案 1 :(得分:0)

您可以使用聚合和having子句执行此操作。您正在寻找同时包含SuppbankAB和非'ExV'值的'Exv'

select SuppbankAB, SuppAB, Suppstatus 
from ABTABLE
where SuppbankAB <> SuppAB and SuppbankAB <> 0 
group by SuppbankAB,SuppAB, Suppstatus 
having sum(case when Suppstatus = 'ExV' then 1 else 0 end) > 0 and
       sum(case when Suppstatus <> 'ExV' then 1 else 0 end) > 0;

第一个子句计算每个'ExV' SuppBankAB行的行数。它在至少有一个时通过。第二个计算没有该值的行数,并且当至少一个没有该值时传递。