2012-12-11 12 views
5

これを行う方法を見つけることができず、検索方法がわからないようです。複数の条件で別のテーブルのSUM(値)に基づいて1つのテーブルを更新する

ID varchar(6) 
CCY varchar(3) 
Val1 decimal(20,5) 
Val2 decimal(20,5) 
FOO decimal(20,5) 

[FOOS]

ID varchar(6) 
CCY varchar(3) 
Val decimal(20,5) 

MASTERがIDごとに1つの行を含む別のテーブル/ CCY複合キー(厥正しい用語ならわからない)例えば:

Iテーブル[MASTER]を有します

ABCDEF GBP 200.00 100.00 null 
ABCDEF EUR 400.00 150.00 null 
ZYXWVU GBP 300.00 200.00 null 
ZYXWVU EUR 400.00 200.00 null 

FOOS複数の行を含み、すべてのMASTER例えばための行が含まれていません

ABCDEF GBP 50.00 
ABCDEF GBP 51.00 
ABCDEF GBP 150.00 
ZYXWVU GBP 100.00 
ZYXWVU EUR 200.00 
ZYXWVU EUR 400.00 

私だけSUM(FOOS.Val)MASTER行に一致する更新するクエリを実行したいと思います。例えば

ABCDEF GBP 200.00 100.00 251.00 
ABCDEF EUR 400.00 150.00 null 
ZYXWVU GBP 300.00 200.00 100.00 
ZYXWVU EUR 400.00 200.00 600.00 

...しかし、私はオプションのNUMER(where existsinner join)を試したが、私は、単一のMASTERのいずれかのリンクのことができるようにするか、SUM(...)

+0

マスターテーブルにはID/CCYごとに1つの行が含まれています。また、一致するID/CCYのためにSUMをMasterに更新したいとします。あれは正しいですか? FooのID/CCYでグループを作成し、その最初のクエリをネストされたクエリとして使用してMasterを更新するのはなぜですか? – bonCodigo

+0

マフムードがあなたに提供した答えがあります:) – bonCodigo

答えて

12

はこれを試してみてくださいますように見えることはできません解決策:postgresので

UPDATE m 
SET m.Foo = f.valsum 
FROM [MASTER] m 
INNER JOIN 
(
    SELECT ID, CCY, SUM(val) valsum 
    FROM Foos 
    GROUP BY ID, CCY 
) f ON m.ID = f.ID AND m.CCY = f.CCY; 
4

、私は私のために働くためにこれで解決策を調整する必要がありました:

UPDATE [MASTER] m 
SET Foo = f.valsum 
FROM 
(
    SELECT ID, CCY, SUM(val) valsum 
    FROM Foos 
    GROUP BY ID, CCY 
) f 
WHERE m.ID = f.ID AND m.CCY = f.CCY; 
関連する問題