计数返回null的Oracle SQL联接
我在Oracle SQL中遇到以下查询问题:计数返回null的Oracle SQL联接,sql,oracle,join,count,null,Sql,Oracle,Join,Count,Null,我在Oracle SQL中遇到以下查询问题: SELECT t.diif, t.mlf_response, v.total FROM t_temp_rows t LEFT OUTER JOIN (SELECT a.diif, s.mlf_response, COUNT(a.customer_terid) total FROM ter_details a INNER JOIN lieu_details s ON a.lieu_id = s.lieu_id WHERE a.customer_
SELECT t.diif, t.mlf_response, v.total
FROM t_temp_rows t
LEFT OUTER JOIN
(SELECT a.diif, s.mlf_response, COUNT(a.customer_terid) total
FROM ter_details a
INNER JOIN lieu_details s ON a.lieu_id = s.lieu_id
WHERE a.customer_name = 'CUSTOMER_A' AND mlf_response IS NOT NULL
GROUP BY a.diif, s.mlf_response) v ON v.diif = t.diif AND v.mlf_response = t.mlf_response;
t_temp_行包含diif和mlf_响应的所有可能组合,无论它们是否实际返回子查询中的计数。我希望t_temp_行中的每一行都有一个计数,包括没有计数的行的0(一旦它实际工作,我将添加NVL)
如果我运行查询,而不是返回“total”中的计数,其中有一个值,其他地方为null,那么每一行的计数都为null
预期:
diif mlf_response total
---- ------------ -----
ABCD YES 12
ABCD NO 32
ABCE YES 54
ABCE NO 01
ABCF YES null
ABCF NO null
实际:
diif mlf_response total
---- ------------ -----
ABCD YES null
ABCD NO null
ABCE YES null
ABCE NO null
ABCF YES null
ABCF NO null
我做错了什么?您需要将
a.customer\u name='customer\u a'
添加到左侧的外部联接,因为将其添加到where,将使其成为内部联接
SELECT t.diif, t.mlf_response, v.total
FROM t_temp_rows t
LEFT OUTER JOIN
(SELECT a.diif, s.mlf_response, COUNT(a.customer_terid) total
FROM ter_details a ON a.customer_name = 'CUSTOMER_A'
LEFT OUTER JOIN lieu_details s ON a.lieu_id = s.lieu_id
WHERE mlf_response IS NOT NULL
GROUP BY a.diif, s.mlf_response) v ON v.diif = t.diif AND v.mlf_response = t.mlf_response;
您是否尝试在计数中使用其他列?例如,如果您进行计数(a.diif),您是否仍然获得所有的空值?这可能不是您想要计算的,但测试以查看您得到的结果可能有助于找到解决方案。显而易见的结论是子查询中没有与
CUSTOMER\u a
匹配的行。是否有CHAR=VARCHAR
连接?寻找数据类型。@GordonLinoff我不相信是这样的。如果子查询正在返回其他两列的数据,那么肯定有一些数据。@Jenn。子查询不是。第一张桌子是,那是错的。包含该字段的表LIUE_details与ter_details是内部联接的,因此在WHERE子句或ON子句中放置mlf_响应不是NULL也没有区别。这一点很好。我更新了它,使Liue\u details成为一个左外连接。哦,我刚刚注意到,您提到了a.customer\u name='customer\u a'
,而我提到的mlf\u响应不是NULL
。很抱歉但关键是:内部查询(派生表v)没有外部联接。因此,从何处切换到ON是没有用的。而且OP似乎认为内部连接应该返回记录,因此将其转换为外部连接不应该解决他/她的问题。