我试图获得供应商的银行发送至地址编号的输出,其中供应商/供应商现在是前供应商,但这些供应商的银行发送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');
感谢您的提前帮助
答案 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
行的行数。它在至少有一个时通过。第二个计算没有该值的行数,并且当至少一个没有该值时传递。