2015-11-14 33 views
0

我们有三张表格,代理商,地区和国家,我们希望将它们合并到一张新的国家/地区表格中。将表格与TSQL组合成一张表格

旧的模式是

oldSchema.Agencies 
AgentId PK,int 
TaxName varchar(3) 
TaxRate decimal(18,3) 

oldSchema.Regions 
RegionCode PK,tinyint 
AgentId int 

oldSchema.Countries 
CountryCode PK,varchar(2) 
CountryName varchar(50) 
RegionCode tinyint 

我们的组织不再用户的机构和地区,所以我们希望该机构的数据合并到一个newSchema.Countries表。

新的架构是

newSchema.Countries 
CountryCode PK,varchar(2) 
CountryName varchar(50) 
TaxName varchar(3) 
TaxRate decimal(18,3) 

下面的更新查询是不正确的,因为它插入相同的数据到每一行

INSERT INTO newSchema.Countries (
    CountryCode 
    ,CountryName 
    ,TaxName 
    ,TaxRate 
    ) 
SELECT OldSchema.Countries.CountryCode 
    ,OldSchema.Countries.CountryName 
    ,OldSchema.Agencies.TaxName 
    ,OldSchema.Agencies.TaxRate 
FROM OldSchema.Agencies 
INNER JOIN (
    OldSchema.Regions INNER JOIN OldSchema.Countries ON OldSchema.Regions.RegionCode = OldSchema.Countries.RegionCode 
    ) ON OldSchema.Agencies.AgentId = OldSchema.Regions.AgentId 
    WHERE NewSchema.Countries.CountryCode = OldSchema.Countries.CountryCode 

我们如何插入TaxName和将TaxRate,每家机构进入新国家的表格是否使每个国家都可以从机构表中得到正确的税收?

+0

你的意思是每行都有相同的数据?示例数据可能对您有所帮助。 –

回答

1

我不确定您遇到的问题,但我认为您有多个regionsAgentId相同,从而导致特定国家/地区的重复数据。

如果这是你的问题,请尝试下面的查询,否则提供更多的细节来帮助你。

INSERT INTO newSchema.Countries 
(CountryCode,CountryName,TaxName,TaxRate) 
select distinct 
    c.CountryCode, 
    c.CountryName, 
    a.TaxName, 
    a.TaxRate 
from oldSchema.Agencies a 
inner join oldSchema.Regions r on a.AgentId = r.AgentId 
inner join oldSchema.Countries c on r.RegionCode = c.RegionCode 

还要检查这个fiddle与我创建的笔画演示目的样本数据。

+0

感谢您的协助@alejandro zuleta。我用样本数据更新了你的小提琴。示例数据向代理表中插入不同的税额,但返回的SQL在目标表的每一行中仍具有相同的税额。 – Vague

+0

我添加了不正确的数据。我现在已经更正了数据,并且您的解决方案正常工谢谢! – Vague

相关问题