Update one table based upon SUM(values) in another table on multiple criteria

sql, sql-update, t-sql

Solution

Try this solution:

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;

Problem

I can't seem to find out how to do this and not sure exactly how to search for it! I have a table `[MASTER]`: ``` ID varchar(6) CCY varchar(3) Val1 decimal(20,5) Val2 decimal(20,5) FOO decimal(20,5) ``` and another table `[FOOS]` ``` ID varchar(6) CCY varchar(3) Val decimal(20,5) ``` `MASTER` contains one row per ID/CCY composite key (not sure if thats correct term) e.g. ``` 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` contains multiple rows and DOES NOT contain a row for every `MASTER` e.g. ``` ABCDEF GBP 50.00 ABCDEF GBP 51.00 ABCDEF GBP 150.00 ZYXWVU GBP 100.00 ZYXWVU EUR 200.00 ZYXWVU EUR 400.00 ``` I'd like to run a query to update only matching `MASTER` rows with `SUM(FOOS.Val)`. e.g. ``` 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 ``` ...but although I've tried a numer of options (`where exists`, `inner join`) I can't seem to be able to either link to a single `MASTER` or do the `SUM(...)`

Original source