【问题标题】:Updating a column in SQL Server with difference in value of some column in another table用另一个表中某些列的值更新 SQL Server 中的列
【发布时间】:2019-09-20 08:58:17
【问题描述】:

我在 SQL Server 中有两个这样的表:

表 1

表 2

我需要更新表 1 中的 Pending qty 列,方法是从中减去 Invoice qty 列的值。

更新我的表 1 后应该是这样的:

我怎样才能做到这一点?

谢谢

【问题讨论】:

  • 真的是所有涉及的数据吗?即:如果我们提供一个update 语句来实现您所问的,如果您运行两次会发生什么?待处理数量为 -5、-6 和 -7 是否可以接受?
  • 请不要以图片形式发布数据,以表格格式text或DDL和DML语句提供。你试过什么了?看来你知道你需要一个JOIN 和一个UPDATE,所以请包括你尝试过的 SQL 并解释它为什么不起作用。谢谢。
  • 请展示你可以做的部分并解释你是如何被卡住的。请参阅How to Ask、其他help center 链接、点击谷歌搜索“stackexchange 作业”和投票箭头鼠标悬停文本。不要让我们做你的(家庭)工作。

标签: sql sql-server join sql-update


【解决方案1】:

您可能需要使用 INNER JOIN 连接两个表

UPDATE t1
SET t1.PendingQty =  t1.t1.PendingQty - t2.Invoice.Qty
FROM Table1 t1
INNER JOIN Table2 t2 ON t1.PONumber = t2.PONumber

【讨论】:

  • 谢谢。会试试这个
【解决方案2】:

类似这样的:

UPDATE t1
    SET t1.[Pending qty] -= ISNULL((SELECT SUM(t2.[Invoice qty])
                                    FROM Table2 AS t2
                                    WHERE t1.[PO Number] = t2.[PO Number]
                                    AND t1.[Part number] = t2.[Part number]), 0);
FROM Table1 AS t1;

我猜测每个待定表行可能有多个发票行。

【讨论】:

  • 但如前所述,您还需要考虑如何清理发票表。请注意,我添加了子选择以避免如果您只是执行 INNER JOIN 并且每个都有多行时可能发生的问题。
  • 谢谢。会试试这个
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-01-22
  • 2013-09-05
  • 1970-01-01
  • 2015-06-04
  • 2011-04-18
  • 1970-01-01
  • 2021-10-28
相关资源
最近更新 更多