尝试编写查询以使用同一个表中的数据更新表。
基本上,我们在此表中有两种类型的数据,预算和预测,按客户,产品,会计年度和月份分摊。
数据样本如下:
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复制到另一种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'
我是否有正确的查询或错过了什么?
感谢。
答案 0 :(得分:2)
我看起来对我好。但是要确保进行测试始终是个好主意。使用
将表CustomerCosts复制到新的临时表中SELECT * INTO Test_CustomerCosts FROM CustomerCosts
之后尝试更新(更改脚本,使其适用于Test表)并查看结果。
尝试修改您的查询以选择:
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'
看全貌。