使用TSQL将表组合到一个表中

时间:2015-11-14 00:04:40

标签: sql-server 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插入到新的“国家/地区”表格中,以便每个国家/地区获得从代理商表格中应用的正确税金?

1 个答案:

答案 0 :(得分:1)

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

如果这是您的问题,请尝试以下查询,否则请提供更多详细信息以帮助您。

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,其中包含我为了演示目的而创建的示例数据。