计数返回null的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_

我在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_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似乎认为内部连接应该返回记录,因此将其转换为外部连接不应该解决他/她的问题。