0
我在一个查询中需要帮助。我使用SQL Server 2008的SQL Server更新单列中有多个列的案例
我有三个表(它们更简单,只是举例):该表中
create table PriceComponents
(id int,
summ money,
svkey1 int,
comission1 float,
svkey2 int,
comission2 float,
to_key int
);
create table Comissions
(
id int,
commission float,
svkey int,
to_key int
);
create table Goods
(
to_key int
);
和简单的数据:
insert into Goods values (1), (2), (3);
insert into Comissions values (1, 15, 1, 2), (2, 10, 2, 2), (3, 5, 1, 3);
insert into PriceComponents values (1, 100, 1, 0, 2, 0, 2), (2, 200, 1, 0, 2, 0, 3);
而且我想与查询:更新PriceComponents
(comission1
和comission2
列):
update dbo.PriceComponents
set comission1 = case when Comissions.svkey=svkey1 then dbo.Comissions.commission else comission1 end,
comission2 = case when Comissions.svkey=svkey2 then dbo.Comissions.commission else comission2 end
from dbo.PriceComponents
left outer join dbo.Goods on dbo.PriceComponents.to_key = dbo.Goods.to_key
left outer join dbo.Comissions on dbo.Goods.to_key = dbo.Comissions.to_key;
这样的查询PriceComponents
之前已经看起来像:
id summ svkey1 comission1 svkey2 comission2 to_key
1 100,00 1 0 2 0 2
2 200,00 1 0 2 0 3
后:
id summ svkey1 comission1 svkey2 comission2 to_key
1 100,00 1 15 2 0 2
2 200,00 1 5 2 0 3
但我希望这样的结果:
id summ svkey1 comission1 svkey2 comission2 to_key
1 100,00 1 15 2 10 2
2 200,00 1 5 2 0 3
我真的不明白的地方我有一个错误。
谢谢你的回答。但是,如果我执行相同条件的select查询:select * from dbo.PriceComponents left outer join dbo.Goods on dbo.PriceComponents.to_key = dbo.Goods.to_key left outer join dbo.Comissions on dbo.Goods.to_key = dbo。 Comissions.to_key;我将有三排。可能是我错了,但我希望更新将使用此行和PriceComponents中的一行,我将有两个更新。如果是这样。我如何完成我的任务 - 更新PriceComponents中所有行的所有连接? – 2012-02-01 19:52:36
您只有一行符合要求。为了满足要求,您可能需要对数据进行两次传递 – JNK 2012-02-01 19:57:54