比较2个表并将缺失的记录添加到第一个表中,同时考虑年/月

时间:2015-03-12 11:22:41

标签: sql compare records missing-data

我有2个表,一个包含名为FACT_QUANTITY_TMP的代码和预算,另一个是包含所有可能代码的树,名为C_DS_BD_AP_A。

存在的所有代码都在此C_DS_BD_AP_A表中,但并非所有代码都在FACT_QUANTITY_TMP中。只有那些有预算的人才能通过ERP添加。 我们需要所有代码都在此FACT_QUANTITY_TMP表中,在这种情况下预算为0。

我首先尝试通过以下查询获取缺失的代码:

    SELECT T2.D_ACTIECODE From
    (SELECT distinct
      A.FULL_DATE as FULL_DATE, A.DIM03 as DIM03
        FROM FACT_QUANTITY_TMP A) T1
    RIGHT JOIN
    (select distinct B.D_ACTIECODE AS D_ACTIECODE from C_DS_BD_AP_A B)  T2
    ON
    T1.DIM03 = T2.D_ACTIECODE 
    where T1.DIM03 is null
    order by T1.full_date

我得到了我遗失的记录列表,但它没有记录目标表的FULL_DATE(年和月)。 简而言之,FACT_QUANTITY_TMP需要添加所有记录,以便按月和年分组。

在这里寻找最好的方法,当ERP数据被拉动时,这个查询将在每月自动运行的存储过程中使用。

1 个答案:

答案 0 :(得分:0)

您可以通过cross join生成所有组合然后删除已存在的组合来生成缺失的记录。例如:

select fd.fulldate, c.D_ACTIECODE
from (select distinct fulldate from fact_quantity_tmp) fd cross join
     (select D_ACTIECODE from C_DS_BD_AP_A) c left join
     fact_quantity_tmp fqt
     on fqt.fulldate = fd.fulldate and fqt.dim03 = c.D_ACTIECODE
where fqt.fulldate is null;

您可以在此之前添加insert以将这些行插入事实表。