SQL Server使用大小写的单行更新多个列

时间:2012-02-01 19:33:10

标签: sql

我在一个查询中需要帮助。我使用的是SQL Server 2008。

我有三张桌子(例如,它们更简单):

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(列comission1comission2):

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

我真的不明白我的错误在哪里。

1 个答案:

答案 0 :(得分:1)

JOIN to_key,但试图从Comissions中的两个不同的行中提取,其中只有一行匹配。

to_key值仅匹配Comissions行中的一个,这是第一个更新comission1的行。 Comission2永远不会匹配,因为to_keysvkey值在同一数据行中不会正确。