2012-12-11 13 views
5

Non riesco a scoprire come farlo e non sono sicuro di come cercare esattamente!Aggiornare una tabella basata su SUM (valori) in un'altra tabella su più criteri

Ho una tabella [MASTER]:

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

e un altro tavolo [FOOS]

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

MASTER contiene una riga per ID chiave/CCY composito (non sicuro se questo termine corretto) esempio

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 contiene più righe e non contiene una riga per ogni esempio 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 

mi piacerebbe eseguire una query per aggiornare solo le righe corrispondenti MASTER con SUM(FOOS.Val). per esempio.

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 

... ma anche se ho provato un numer di opzioni (where exists, inner join) posso non sembrano essere in grado né di collegamento a un singolo MASTER o fare il SUM(...)

+0

La tabella master contiene una riga per ID/CCY. E si desidera aggiornare Master con SUM per la corrispondenza ID/CCY. È corretto? Perché non fai un gruppo su ID/CCY su Foo, quindi aggiorna Master usando quella prima query come query annidata? – bonCodigo

+0

Ecco la risposta che Mahmood ti ha fornito :) – bonCodigo

risposta

12

Prova questa soluzione:

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

con postgres, ho dovuto modificare la soluzione con questo a lavorare per me:

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; 
Problemi correlati