首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Oracle - SCD类型2

Oracle - SCD类型2
EN

Stack Overflow用户
提问于 2020-06-19 15:27:06
回答 1查看 115关注 0票数 0

我是甲骨文新手。

我有两张桌子叫。

dwh_tbl_dim_supplier_type2_ar (目标表)

stg_tbl_dim_supplier_ar (源表)

dwh_tbl_dim_supplier_type2_ar包含六列

代码语言:javascript
复制
SUPPLIER_KEY (PK)
SUPPLIER_CODE
SUPPLIER_NAME
SUPPLIER_STATE
START_DATE
END_DATE

stg_tbl_dim_supplier_ar包含三列

代码语言:javascript
复制
SUPPLIER_KEY (PK)
SUPPLIER_NAME
SUPPLIER_STATE

在源表I中,已经有一条记录SUPPLIER_KEY = 001,SUPPLIER_NAME = Phlogistical Company,SUPPLIER_STATE = IL

在目标表I中,已经有一个数据SUPPLIER_KEY = 001 SUPPLIER_CODE = 001 SUPPLIER_NAME = SUPPLIER Company SUPPLIER STATE = CA START_DATE = 2000-01-01 END_DATE = 9999-12-31

在这些表中,SUPPLIER_STATE列存在差异。我有一个任务是使用SCD Type 2用源表中的数据更新目标表。该方法通过创建多条记录来跟踪历史数据。另外,目标表的start_date和end_date列中的结果必须使用不带时间的日期格式(例如: 2020-06-18)如何使用SQL MERGE或其他查询执行此任务?有没有人能用Query一步一步地给我解释一下?你可以看到下面的图片,看看它是什么样子。

任何帮助都将不胜感激。

谢谢。

EN

回答 1

Stack Overflow用户

发布于 2020-06-19 21:29:57

这应该适合您的用例。

代码语言:javascript
复制
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')
                )
 ;
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62465314

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档