首页 > 解决方案 > 为什么这不返回 0

问题描述

我有一个像这样的查询:

select nvl(nvl(sum(a.quantity),0)-nvl(cc.quantityCor,0),0) 
    from RCV_TRANSACTIONS a 
        LEFT JOIN (select c.shipment_line_id,c.oe_order_line_id,nvl(sum(c.quantity),0) quantityCor 
                   from RCV_TRANSACTIONS c
                   where c.TRANSACTION_TYPE='CORRECT' 
                   group by c.shipment_line_id,c.oe_order_line_id) cc on (a.shipment_line_id=cc.shipment_line_id and a.shipment_line_id=7085740)
    where a.transaction_type='DELIVER'
        and a.shipment_line_id=7085740
    group by nvl(cc.quantityCor,0);

查询运行正常,但没有返回值。如果没有找到数量,我希望它返回 0。我哪里出错了?

标签: sqloracle

解决方案


GROUP BY如果过滤掉所有行,则带有 a 的聚合查询不返回任何行。

即使过滤掉所有行,带有no 的聚合查询也总是返回一行。GROUP BY

所以,只需删除GROUP BY. 并将其更改SELECT为:

select coalesce(sum(a.quantity), 0) - coalesce(max(cc.quantityCor), 0) 

推荐阅读