微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用 SQL 创建 SCD 类型 2

如何解决使用 SQL 创建 SCD 类型 2

我正在尝试在 sql Server 中为数据仓库创建 SCD 类型 2 表。 我正在使用 MERGE 语句,我的问题是“匹配时”部分。 例如:我有一个客户从迈阿密搬到纽约。我想保存历史版本并为该客户插入新记录。 问题是这不起作用。

请注意,“当不匹配时”部分运行良好,并且插入了新客户。 有没有其他人遇到过这个问题? 谢谢!

这是我写的代码

insert FandangoDW.dbo.DIM_CUSTOMERS
        select Customer,CustomerName,Gender,BirthDate,Age,AgeGroup,CustomerCity,CustomerState,CustomerCountry,ValidFrom,ValidUntil
        from (merge FandangoDW.dbo.DIM_CUSTOMERS as dim using (select * from FandangoSTG.dbo.STG_CUSTOMERS) as stg 
            on dim.Customer = stg.Customer 
            WHEN NOT MATCHED by target
            THEN
            INSERT
            (
              Customer,ValidUntil
            )
            VALUES
            ( stg.Customer,stg.CustomerName,stg.Gender,stg.BirthDate,stg.Age,stg.AgeGroup,stg.CustomerCity,stg.CustomerState,stg.CustomerCountry,GETDATE() - 1,null
            )
            WHEN MATCHED AND dim.ValidUntil = null AND stg.CustomerCity <> dim.CustomerCity
            THEN
            UPDATE  SET
            dim.ValidUntil = GETDATE() - 2,dim.CustomerCity = stg.CustomerCity,dim.CustomerState=stg.CustomerState,dim.CustomerCountry=stg.CustomerCountry
            OUTPUT
            $Action,stg.Customer,null
)as merge_out
(
    Action,Customer,ValidUntil
)
WHERE  Action = 'UPDATE';

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。