Sql 如果数量为零,则删除行数据

Sql 如果数量为零,则删除行数据,sql,pervasive-sql,Sql,Pervasive Sql,我在收据表中有这样的数据,因为正值是收到货物的金额,而负值是退货的金额 在上图中,编号为01267A的接收者是收到数量为1的第一个项目的接收者。然后在货物01268A的收据号上有退货。我不想让这笔交易出现 这是我尝试过的地方 select I2.Receiver_No, I2.Purchase_order, I2.PO_Line, I2.Qty_received from (Select Purchase_order,

我在收据表中有这样的数据,因为正值是收到货物的金额,而负值是退货的金额

在上图中,编号为01267A的接收者是收到数量为1的第一个项目的接收者。然后在货物01268A的收据号上有退货。我不想让这笔交易出现

这是我尝试过的地方

 select I2.Receiver_No, 
        I2.Purchase_order, 
        I2.PO_Line, 
        I2.Qty_received
   from (Select Purchase_order, 
                PO_Line 
           from Receipts 
       group by Purchase_order, 
                PO_Line 
         having sum(qty_received) <>'0') I1 inner join 
        Receipts I2 On 
             I1.Purchase_Order = I2.Purchase_Order and 
             I1.PO_Line = I2.PO_Line
但是结果没有达到我想要的。
请提供帮助。

如果您的要求是获取数量小于1的行,而不是负数的行:

SELECT * FROM Receipts  WHERE  ABS(QtyRecvd) >0 AND ABS(QtyRecvd) < 1
试试这个

   SELECT * FROM Receipts where Qty_received>0 AND Qty_received < 1

这将适用于您提供的非常有限的数据。如果您愿意提供有关数据外观的更多信息,那么就更容易找到更好的解决方案

如果数据中有大量具有相同数量的行,则此解决方案将不起作用


通过大量的猜测,您似乎对从表中检索所有没有被另一行抵消的行感兴趣?因此,-1被1抵消,而0.5没有被任何东西抵消,因此显示包含0.5的行?似乎您想要实际平衡的行,并删除所有其他行。。解释一下betterYes,这就是我的意思。对不起,我的英语不好。@DeniYunus你怎么能说退货交易与实际交易相关联?如果你有2,4,-1,-1,5怎么办?也许你只需要每个采购订单/订单行组的金额,即使你没有部分退货,如果你有2,2,-2怎么办?你应该删除第一行还是第二行?这个答案似乎有点做作,即使原来的问题很不清楚。谢谢你的回答,但这不是我想要的。正如评论中已经解释的那样,因为正值是收到货物的金额,而负值是退货的金额。我希望这个退货交易不显示。是的,我有很多线,这个答案不是我想要的。@DeniYunus好的,很公平。如果你能更新你的问题,我很乐意帮助你。更新前,请阅读以下内容以供参考:
SELECT
    r.Receiver_No, r.Purchase_order, r.PO_Line, r.Qty_received
FROM
    receipts r
WHERE 
    NOT EXISTS (SELECT 
        purchase_order 
    FROM 
        receipts s 
    WHERE 
        r.qty_received = -s.qty_received
    )