将查询从一个文档更新到另一个 table 按行

Update Query from one document to another table Row wise

我有以下 tables:

[@FARMCOST]      OIGE          IGE1
-----------      ------        -----------
u_farmname       Docnum        ItemName
u_blockcode      DOCentry      qty
u_cost           U_FarmName    Price
                               LineTotal
                               U_FarmName
                               U_blockcode
                               DOCentry

我有一个问题

UPDATE [dbo].[@FARMCOST]
SET u_cost = u_cost + (
        SELECT b.LineTotal
        FROM OIGE a
        INNER JOIN IGE1 b ON a.DOCentry = b.docentry
        )
WHERE u_farmname = (
        SELECT a.U_FarmName
        FROM OIGE a
        INNER JOIN IGE1 b ON a.DOCentry = b.docentry
        )
    AND U_BlockCode = (
        SELECT a.U_BlockCode
        FROM IGE1 a
        INNER JOIN IGE1 b ON a.DOCentry = b.docentry
        WHERE
        GROUP BY a.U_BlockCode
        )

我有两个文档,一个是块成本;即[dbo].[@FARMCOST] @ 第二个是 Issue Doc 即 OIGE Master Table 和 IGE1 child table .

现在我想根据此处输入的代码更新块成本 Tableselected 块,即 IGE1.U_BlockCode。 上面的查询工作正常,它正在更新一行,即一个项目,但是当我 select 多行有不同的块时,我收到错误。

任何 Help/Idea 都将受到高度赞赏。

更新一个 table 中的一批条目从其他 table 中获取数据的一般语法是

UPDATE dst
SET col = whatever
FROM dst
JOIN src ON dst.columnName = src.columnName

当然你可以在这里使用table别名。

所以您的更新查询应该类似于:

UPDATE fc 
SET u_cost = u_cost + grp.LineTotalSum
FROM [dbo].[@FARMCOST] AS fc
JOIN (
    SELECT OIGE.U_FarmName, IGE1.U_blockCode, SUM(IGE1.LineTotal) AS LineTotalSum
    FROM OIGE 
        JOIN IGE1 ON OIGE.U_FarmName = IGE1.U_FarmName
    GROUP BY OIGE.U_FarmName, IGE1.U_blockCode
) as grp ON fc.u_FarmName = grp.U_FarmName AND fc.u_blockcode = grp.U_blockcode

注意 - 我正在根据您的问题做出最佳估计。如果有任何列名错误,或者我误解了外键,请在您的问题中更清楚地说明它们。