比较 2 个表并将缺少的记录添加到第一个,同时考虑 year/months
Compare 2 tables and add missing records to the first, taking into account year/months
我有 2 个 table,一个带有代码和预算,称为 FACT_QUANTITY_TMP,另一个是一棵包含所有可能代码的树,称为 C_DS_BD_AP_A。
存在的所有代码都在 C_DS_BD_AP_A table 中,但并非所有代码都在 FACT_QUANTITY_TMP 中。只有有预算的人才会被 ERP 添加。
我们需要所有代码都在这个 FACT_QUANTITY_TMP table 中,只是在这种情况下预算为 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
我得到了我丢失记录的列表,但它没有考虑目的地 table 的 FULL_DATE(年份和月份)。
简而言之,FACT_QUANTITY_TMP 需要添加所有缺失的记录,按月和年分组。
在这里寻找最好的方法,当 ERP 数据被提取时,这个查询将在每个月自动 运行 存储过程中使用。
您可以通过执行 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
以将这些行插入事实 table。
我有 2 个 table,一个带有代码和预算,称为 FACT_QUANTITY_TMP,另一个是一棵包含所有可能代码的树,称为 C_DS_BD_AP_A。
存在的所有代码都在 C_DS_BD_AP_A table 中,但并非所有代码都在 FACT_QUANTITY_TMP 中。只有有预算的人才会被 ERP 添加。 我们需要所有代码都在这个 FACT_QUANTITY_TMP table 中,只是在这种情况下预算为 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
我得到了我丢失记录的列表,但它没有考虑目的地 table 的 FULL_DATE(年份和月份)。 简而言之,FACT_QUANTITY_TMP 需要添加所有缺失的记录,按月和年分组。
在这里寻找最好的方法,当 ERP 数据被提取时,这个查询将在每个月自动 运行 存储过程中使用。
您可以通过执行 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
以将这些行插入事实 table。