使用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版本。 只是记忆。