1

尝试编写查询以使用同一表中的数据更新表。

基本上我们在这个表中有两种类型的数据,预算和预测,按客户、产品、财政年度和月份划分。

数据样本如下:

CustomerCosts
CustomerNo     Product     FiscalYear    Month    DataType    DataField    Q    R    G
CU01           REG         2014          1        Budget      Commission   10   2    20
CU01           REG         2014          1        Budget      Warehouse    5    5    25
CU01           REG         2014          2        Budget      Commission   30   1    30
CU01           REG         2014          2        Budget      Warehouse    12   2    24
CU01           REG         2014          1        Forecast    Commission   10   2    20
CU01           REG         2014          1        Forecast    Warehouse    5    5    25
CU01           REG         2014          2        Forecast    Commission   30   1    30
CU01           REG         2014          2        Forecast    Warehouse    12   2    24

基本上,用户想要从一种 DataType 复制到另一种。例如,将 2014 年预算复制到 2014 年预测中。

我想出了这个查询,但是虽然它似乎可以工作,但行更新计数显示正在更新的行数超过了应有的行数。

UPDATE CustomerCosts 
SET CustomerCosts.Q = f.Q, 
CustomerCosts.R = f.R,
CustomerCosts.G = f.G
FROM CustomerCosts
JOIN CustomerCosts f
ON CustomerCosts.CustomerNo = f.CustomerNo AND 
CustomerCosts.Product = f.Product AND 
CustomerCosts.Month = f.Month AND 
CustomerCosts.DataField = f.DataField
WHERE CustomerCosts.FiscalYear = 2014 AND 
CustomerCosts.DataType = N'Forecast' AND 
f.FiscalYear = 2014 AND
f.DataType = N'Budget'

我有这个查询正确还是我错过了什么?

谢谢。

4

1 回答 1

2

我看起来还可以。但可以肯定的是,做一个测试总是个好主意。使用将表 CustomerCosts 复制到新的临时表中

SELECT * INTO Test_CustomerCosts FROM CustomerCosts

之后尝试更新(更改脚本使其适用于测试表)并查看结果。

尝试修改您的查询以选择:

select 
CustomerCosts.*, f.*
FROM CustomerCosts
JOIN CustomerCosts f ON 
  CustomerCosts.CustomerNo = f.CustomerNo AND 
  CustomerCosts.Product = f.Product AND 
  CustomerCosts.Month = f.Month AND 
  CustomerCosts.DataField = f.DataField
WHERE 
  CustomerCosts.FiscalYear = 2014 AND 
  CustomerCosts.DataType = N'Forecast' AND 
  f.FiscalYear = 2014 AND
  f.DataType = N'Budget'

看全貌。

于 2013-11-08T15:40:37.610 回答