13

私はこれを行う方法を見つけることができず、それを検索する方法が正確にわからないようです!

私はテーブルを持っています[MASTER]

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)

MASTERID / CCY複合キーごとに1つの行が含まれます(それが正しい用語かどうかはわかりません)。例:

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

FOOSMASTER複数の行が含まれ、すべての例の行は含まれません

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

MASTERクエリを実行して、一致する行のみを更新したいと思いますSUM(FOOS.Val)。例えば

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

...しかし、私はいくつかのオプションを試しましたが(where existsinner join)、シングルにリンクすることMASTERも、SUM(...)

4

3 に答える 3

24

このソリューションを試してください:

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;
于 2012-12-11T10:39:58.260 に答える