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)

MASTER每个 ID/CCY 复合键包含一行(不确定这是否是正确的术语),例如

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

我想运行一个查询来只更新匹配的MASTERSUM(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 exists, inner 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 回答
9

使用 postgres,我必须调整解决方案才能为我工作:

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;
于 2017-03-01T05:31:48.850 回答
0

更新帐户 SET (contact_last_name, contact_first_name) = (SELECT last_name, first_name FROM salesmen WHERE salesmen.id = accounts.sales_id);

update orders set amount = (select sum(item_quantity) from order_items where orders.id = order_items.order_id);

于 2020-02-02T22:11:17.487 回答