使用另一个表的SUM更新一个表中的字段

时间:2012-03-08 03:55:31

标签: sql sql-server aggregate-functions sql-update

我正在尝试通过以下方式将表中字段的值设置为另一个表中另一组字段的SUM:

UPDATE table1 
SET fieldToUpdate = 
(
    SELECT SUM(fieldToSum) FROM table2
) 
WHERE thirdField = 'A'

但我没有运气。我见过很多使用连接的例子,但是我的2个表格没有任何关联。

由于

3 个答案:

答案 0 :(得分:4)

虽然子查询应该可以工作,但你可以像这样分解它:

DECLARE @s INT;

SELECT @s = SUM(fieldToSum) FROM dbo.table2;

UPDATE dbo.table1
SET fieldToUpdate = @s
WHERE fieldToUpdate = 'A';

答案 1 :(得分:1)

由于您的表格无关,看起来您已编写的内容应该有效。 table1中fieldToUpdate ='A'的所有行都将fieldToUpdate的列设置为table2中所有fieldToSum的总和。也许你可以澄清你的问题以获得更好的答案?就像在,你究竟遇到的问题是什么,或者预期的样本数据集和结果

更新:

根据您的新注释,如果前一个值为NULL,那么执行fieldToUpdate = [ANY VALUE]之类的操作将导致不返回任何行。您需要使用fieldToUpdate IS NULL。或者,如果您执行以下操作,则可以保留=:ISNULL(fieldToUpdate, 'A') = 'A'

最后,作为调试措施,您可以在更新后检查@@ROWCOUNT以查看它是否甚至更新任何内容(这将确认需要IS NULL)。

答案 2 :(得分:0)

正如我在上面的评论中所述,我试图使用超出该列宽度的值更新fieldToUpdate。感谢大家的帮助。