2012-02-01 17 views
0

1つのクエリでヘルプが必要です。そのテーブル内のSQL Server複数の列を1行で大文字にする

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); 

そして、私がしたい私は、私は3つのテーブルを(彼らは例えば、よりシンプルです)持っているSQL Server 2008の

を使用しますそのクエリで:PriceComponentscomission1comission2列):更新

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

あなたはJOINto_keyにINGのが、唯一の1行が一致しますComissions 2つの異なる行からプルしようとしています。

to_keyの値は、最初にcomission1を更新しているComissions行のうちの1つに一致します。同じデータ行でto_keysvkeyの値が正しくないため、Comission2は一致しません。

+0

ありがとうございます。しかし、私が同じ条件でselectクエリを実行すると、dbo.PriceComponentsからdbo.PriceComponentsを外に出てdbo.Goods.to_key = dboにdbo.PriceComponents.to_key = dbo.Goods.to_keyを外側に残してdbo.Commentsを残します。 Comissions.to_key;私は3つの行を持っています。私は間違っているかもしれませんが、私は更新がこの行を使用し、PriceComponentsの1つの行に対して2つの更新があることを願っています。それがそうであれば。タスクを完了するにはどうすればよいですか?PriceComponentsのすべての行のすべてのコミッションを更新しますか? –

+0

要件に一致する行は1つだけです。この要件を満たすには、おそらく2回データを渡す必要があります – JNK

関連する問題