使用oracle将空列计为零


我正在用Oracle运行一个查询:

SELECT c.customer_number, COUNT(DISTINCT o.ORDER_NUMBER), COUNT(DISTINCT q.QUOTE_NUMBER) FROM Customer c JOIN Orders o on c.customer_number = o.party_number JOIN Quote q on c.customer_number = q.account_number GROUP BY c.customer_number 

这工作很好,我可以得到客户和他们的订单和报价计数。

然而,并不是所有的客户都有订单或报价,但我仍然需要他们的数据。 当我使用LEFT JOIN我从Oracle得到这个错误:

ORA-24347:聚合函数中NULL列的警告

看似这个错误是由于缺less订单和/或报价的客户最终由COUNT(NULL)引起的。

在这个查询中,我怎样才能得到一个空值的COUNT值为0?

我可以做COUNT(DISTINCT NVL(o.ORDER_NUMBER, 0))但是如果订单/报价缺失,那么计数将会变为1 ,这是不好的。 使用NVL(o.ORDER_NUMBER, NULL)有同样的问题。

尝试使用内联视图:

 SELECT c.customer_number, o.order_count, q.quote_count FROM customer c, ( SELECT party_number, COUNT(DISTINCT order_number) AS order_count FROM orders GROUP BY party_number ) o, ( SELECT account_number, COUNT(DISTINCT quote_number) AS quote_count FROM quote GROUP BY account_number ) q WHERE 1=1 AND c.customer_number = o.party_number (+) AND c.customer_number = q.account_number (+) ; 

对不起,我现在不用任何数据库来testing它,或者testing任何ANSI SQL版本。 只是记忆。