簡體   English   中英

Oracle - SCD 類型 2

[英]Oracle - SCD Type 2

我是 Oracle 的新手。

我有 2 張桌子叫。

dwh_tbl_dim_supplier_type2_ar (目標表)

stg_tbl_dim_supplier_ar (源表)

dwh_tbl_dim_supplier_type2_ar包含六列

SUPPLIER_KEY (PK)
SUPPLIER_CODE
SUPPLIER_NAME
SUPPLIER_STATE
START_DATE
END_DATE

stg_tbl_dim_supplier_ar包含三列

SUPPLIER_KEY (PK)
SUPPLIER_NAME
SUPPLIER_STATE

在源表中我已經有一條記錄 SUPPLIER_KEY = 001, SUPPLIER_NAME = Phlogistical Supply Company, SUPPLIER_STATE = IL

在目標表中,我已經有一個數據 SUPPLIER_KEY = 001 SUPPLIER_CODE = 001 SUPPLIER_NAME = Phlogistical Supply Company SUPPLIER STATE = CA START_DATE = 2000-01-01 END_DATE = 9999-12-31

從這些表中,SUPPLIER_STATE 列存在差異。 我的任務是使用 SCD 類型 2 使用 SOURCE TABLE 中的數據更新 TARGET TABLE。此方法通過創建多個記錄來跟蹤歷史數據。 此外,目標表的 start_date 和 end_date 列中的結果必須使用不帶時間的日期格式(例如:2020-06-18) 如何使用 SQL MERGE 或 Oracle 上的其他查詢來執行此任務? 誰能用 Query 一步一步地解釋我? 您可以查看下圖以了解它的外觀。

任何幫助將不勝感激。

謝謝。

在此處輸入圖像描述

這應該適合您的用例。

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')
                )
 ;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM