我有两个表TT_RESULT_SUMMARY_TAB
是父表,TT_RESULT_DETAIL_TAB
是子表。 {strong 1}的{strong>主键'UTC_END_TIME
'是TT_RESULT_SUMMARY_TAB
的外键。
只有当某一天有错误时,才会将错误信息插入TT_RESULT_DETAIL_TAB
。即使没有发现错误,相关信息也会每天插入父表TT_RESULT_DETAIL_TAB
,尽管TT_RESULT_SUMMARY_TAB
1}}当天没有错误信息。
我正在尝试的是弄清楚父表TT_RESULT_DETAIL_TAB
说2016/11/30总共有1000个错误 和2016/12/01共有零错误
TT_RESULT_SUMMARY_TAB
这是我在oracle开发人员上尝试的内容
+----------------------+------------+
|total_number_of_errors| GivenDay |
+----------------------+------------+
| 1000 | 2016/11/30 |
| 0 | 2016/12/01 |
+----------------------+------------+
但我没有关于2016/12/01的信息说0。
答案 0 :(得分:0)
您正在寻找“分区外连接”(在Google上查找)。 https://docs.oracle.com/cd/E11882_01/server.112/e25555/tdpdw_sql.htm#TDPDW007
您需要构建一个表,视图或子查询,其中包含感兴趣区间的所有单独日期。然后对现有查询执行OUTER连接,并使用coalesce(total_number_of_values, 0)
获取0而不是null,以查找错误表中不存在的日期。
例如:
select nvl(t.total_number_of_errors, 0) as total_number_of_errors, d.dt as givenday
from your_query t right outer join
( select to_date('2016/11/30', 'yyyy/mm/dd' dt from dual union all
select to_date('2016/12/01', 'yyyy/mm/dd' from dual
) d
on t.error_date = d.dt;
有更有效的方法来构建“间隔中的所有日期”子查询(使用CONECT BY LEVEL <= ...
) - 不在此处覆盖它,因为它实际上是一个单独的问题。