简体   繁体   中英

Compare 2 tables and add missing records to the first, taking into account year/months

I have 2 tables, one with codes and budgets called FACT_QUANTITY_TMP and the other is a tree with all possible codes called C_DS_BD_AP_A.

All codes that exist are in this C_DS_BD_AP_A table, yet not all are in FACT_QUANTITY_TMP. Only those with budget get added by the ERP. We need all codes to be in this FACT_QUANTITY_TMP table, just with budget to be 0 in that case.

I was trying first to get the missing codes by the following query:

    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

I get a list of my missing records yet it doesn't take into accounts the FULL_DATE (year and month) of the destination table. In short, FACT_QUANTITY_TMP needs to have all records added that it's missing grouped by months and year.

Kind of looking for the best approach here, this query would be used in a automatically run stored proc every month when the ERP data gets pulled.

You can generate the missing records by doing a cross join to generate all combinations and then removing those that are already there. For example:

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;

You can put an insert before this to insert these rows into the fact table.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM