我们公司曾经拥有onpremiere和云ERP系统 最后想将每个ERP系统的数据提取到临时数据库 在我们的数据仓库中。这两个系统是表结构的相同中间体 然而,我们需要合并几个表来创建一个唯一的表。 例如,来自ERP1的dbo.Product和来自ERP2系统的dbp.Product具有重叠的productId(s) 在不破坏数据集成的情况下合并这两个表的理想情况
实施例: ERP1.Product( ProductId int, ProductName varchar(90), 产品varchar(MAX))
ERP2.Product( ProductId int, ProductName varchar(90), 产品varchar(MAX))
答案 0 :(得分:0)
UNION
可行
select * from ERP1
union
select * from ERP2
UNION
返回不同的值,其中UNION ALL
返回所有可能重复的值。当然,每个语句必须返回相同数量的列,并且具有匹配的数据类型。
如果要动态创建表,可以在第一个语句中使用INTO
子句
select * from Server1.dbo.ERP1
into thisServer.dbo.StagingTable
union
select * from Server2.dbo.ERP2
答案 1 :(得分:0)
这里最大的问题是,当产品ID重叠时,是否需要在合并时尊重这一事实?即他们真的是同一产品,还是意外重叠?
如果重叠/确实/需要遵守,那么我建议您在产品名称/描述不同的情况下需要确定哪个是主要来源,然后以一种方式加载数据仓库表忽略来自辅助来源的重复项,例如:
... where erp2product.productid not in (select erp1product.productid from erp1product)
如果没有' true'重叠,然后我倾向于在产品ID的前面添加一个前缀(或添加一个'源'列)以区分它们在数据仓库中,尽管数据仓库中的任何其他表明显包含产品ID必须遵循相同的规则。