Sql Oracle-SCD类型2
我是甲骨文的新手 我有两张桌子Sql Oracle-SCD类型2,sql,database,oracle,data-warehouse,scd,Sql,Database,Oracle,Data Warehouse,Scd,我是甲骨文的新手 我有两张桌子 dwh\u tbl\u dim\u供应商\u类型2\u ar(目标表格) stg\u tbl\u dim\u supplier\u ar(源表) dwh\u tbl\u dim\u supplier\u type2\u ar包含六列 SUPPLIER_KEY (PK) SUPPLIER_CODE SUPPLIER_NAME SUPPLIER_STATE START_DATE END_DATE stg\u tbl\u dim\u supplier\u ar包含三列
dwh\u tbl\u dim\u供应商\u类型2\u ar
(目标表格)
stg\u tbl\u dim\u supplier\u ar
(源表)
dwh\u tbl\u dim\u supplier\u type2\u ar
包含六列
SUPPLIER_KEY (PK)
SUPPLIER_CODE
SUPPLIER_NAME
SUPPLIER_STATE
START_DATE
END_DATE
stg\u tbl\u dim\u supplier\u ar
包含三列
SUPPLIER_KEY (PK)
SUPPLIER_NAME
SUPPLIER_STATE
在源表中,我已经有一个记录供应商\关键字=001,供应商\名称=Phlogistical Supply Company,供应商\状态=IL
在目标表中,我已经有一个数据“供应商”\u KEY=001“供应商”\u CODE=001“供应商”\u NAME=Phlogistical Supply Company SUPPLIER STATE=CA START\u DATE=2000-01-01“结束”\u DATE=9999-12-31
从这些表中可以看出,供应商状态列中存在差异。我的任务是使用SCD类型2使用源表中的数据更新目标表。此方法通过创建多个记录来跟踪历史数据。此外,目标表上“开始日期”和“结束日期”列中的结果必须使用不带时间的日期格式(例如:2020-06-18)。如何使用SQL合并或Oracle上的其他查询执行此任务?谁能用疑问一步一步地给我解释一下吗?你可以看到下面的图片,看看它是什么样子
任何帮助都将不胜感激
谢谢
这应该适合您的用例
MERGE INTO dwh_tbl_dim_supplier_type2_ar DIM
USING (SELECT
A.SUPPLIER_KEY,
B.SUPPLIER_CODE,
A.SUPPLIER_NAME,
A.SUPPLIER_STATE
FROM stg_tbl_dim_supplier_ar A
LEFT JOIN (SELECT DISTINCT SUPPLIER_CODE, SUPPLIER_KEY FROM dwh_tbl_dim_supplier_type2_ar) B
ON A.SUPPLIER_KEY = B.SUPPLIER_KEY
) STG
ON DIM.SUPPLIER_KEY = STG.SUPPLIER_KEY
AND DIM.SUPPLIER_NAME = STG.SUPPLIER_NAME
AND DIM.SUPPLIER_STATE = STG.SUPPLIER_STATE
WHEN MATCHED THEN UPDATE SET DIM.END_DATE = TO_DATE(SYSDATE,'DD/MM/YYYY')
WHEN NOT MATCHED THEN
INSERT (DIM.SUPPLIER_KEY,
DIM.SUPPLIER_CODE,
DIM.SUPPLIER_NAME,
DIM.SUPPLIER_STATE,
DIM.START_DATE,
DIM.END_DATE
)
VALUES (STG.SUPPLIER_KEY,
STG.SUPPLIER_CODE,
STG.SUPPLIER_NAME,
STG.SUPPLIER_STATE,
TO_DATE(SYSDATE,'DD/MM/YYYY'),
TO_DATE('31/12/9999','DD/MM/YYYY')
)
;