【问题标题】:Compare 2 tables and add missing records to the first, taking into account year/months比较 2 个表并将缺失的记录添加到第一个表,考虑到年/月
【发布时间】:2015-03-12 11:22:40
【问题描述】:

我有 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 数据时用于自动运行的存储过程中。

【问题讨论】:

    标签: sql compare records missing-data


    【解决方案1】:

    您可以通过执行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 以将这些行插入到事实表中。

    【讨论】:

      猜你喜欢
      • 2018-04-24
      • 1970-01-01
      • 1970-01-01
      • 2017-08-28
      • 2014-12-26
      • 1970-01-01
      • 2021-12-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多