除非变量存在,否则使用NOT LIKE排除

时间:2017-06-15 08:21:59

标签: sql postgresql select

我正致力于迁移基于股票的零售数据库。

当产品是一次性订单时,产品代码具有领先的CO

除非他们目前,有库存,有库存订单或客户订单,否则我们不希望将CO产品用于其他产品

我尝试了以下和一些CASE变体,但无济于事

SELECT prdcod,
stkqty,
ordqty,
csoqty
FROM prdtbl
WHERE prdtbl.prdcod NOT LIKE '*%'
AND (prdcod NOT LIKE 'CO%' AND stkqty >0 AND ordqty >0 AND csoqty >0);

NOT LIKE'CO%'函数只有在库存数量,ordqty和csqty都小于1 /大于0时才需要发生,如果这些列中有任何数量,我们需要保留产品。

示例数据集位于下面的链接中(没有上面的最后一个查询行)。我希望在这种情况下排除第19和第20行。

https://lh5.googleusercontent.com/qTE1Av9i0x0BSjv_xAMj18bhX14cNWQPW9iYIBtpk4a6imhFiMRd7jRjFim_vPHxzcgu9h4xU9t8opA=w1920-h1070

任何想法都表示赞赏!

**我仍然需要退回正常的产品代码,可能有0个库存或订购qtys

1 个答案:

答案 0 :(得分:0)

使用or作为条件

SELECT prdcod,
stkqty,
ordqty,
csoqty
FROM prdtbl
WHERE prdtbl.prdcod NOT LIKE '*%'
AND (prdcod NOT LIKE 'CO%' 
     or (prdcod like 'CO%' 
         AND (stkqty >0 
              OR ordqty >0 
              OR csoqty >0
             )
         )
     )

所以这就是:

排除所有类似' CO%',除非其中一个数值大于0