基于多个条件的另一个表中的SUM(值)更新一个表

时间:2012-12-11 10:37:15

标签: sql tsql sql-update

我似乎无法了解如何执行此操作并且不确定如何搜索它!

我有一张表[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

我想运行查询,仅使用MASTER更新匹配的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

...但是虽然我尝试了一大堆选项(where existsinner join)但我似乎无法链接到单个{{1}或者MASTER

3 个答案:

答案 0 :(得分:15)

试试这个解决方案:

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;

答案 1 :(得分:5)

使用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;

答案 2 :(得分:0)

更新帐户SET(contact_last_name,contact_first_name)= (从销售人员中选择姓氏,名字 在哪里salesmen.id = account.sales_id);

更新订单 设定数量= (从order_items中选择sum(item_quantity) 其中order.id = order_items.order_id);