我们公司曾经有onpremiere和云ERP系统,他们最终想要从每个ERP系统中提取数据到我们数据仓库中的临时数据库。这两个系统在表结构和模式方面是相同的,但是,我们需要合并几个表来创建唯一的表。例如,来自ERP1的dbo.Product和来自ERP2系统的dbp.Product具有重叠的productId。在不破坏数据完整性的情况下合并这两个表的理想情况是什么
示例: ERP1.Product( ProductId int,ProductName varchar(90),Product varchar(MAX) )
ProductName 2.乘积( Product,ERP2.VARCHAR(90),乘积varchar(MAX) )
发布于 2018-04-18 04:50:23
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
发布于 2018-04-18 04:54:19
这里最大的问题是,当产品ids重叠时,合并时是否需要遵守这一事实?也就是说,它们是否真的是同一个产品,或者重叠是偶然的?
如果重叠/确实/需要尊重,那么我建议您需要在产品名称/描述不同的情况下确定哪个是主要来源,然后以忽略来自次要来源的重复项的方式加载数据仓库表,例如:
... where erp2product.productid not in (select erp1product.productid from erp1product)
如果没有'true‘重叠,那么我倾向于在产品id的前面加上一个前缀(或者添加一个'source’列),以便在数据仓库中区分它们,尽管很明显,数据仓库中包含产品id的任何其他表都必须遵循相同的规则。
https://stackoverflow.com/questions/49887155
复制相似问题