行查询从一个文档更新查询到另一个表

时间:2015-01-07 10:45:34

标签: sql-server

我有以下表格:

[@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
        )

我有两个文件,一个是Block Cost;即[dbo]。[@ FARMCOST] @和第二个是发行文件,即OIGE主表和IGE1子表。

现在我想根据输入代码更新块成本表,这里选择了块,即IGE1.U_BlockCode。 上面的查询工作正常,它正在更新一行,即一个项目,但当我选择多行不同的块时,我收到错误。

任何帮助/想法都会非常明显。

1 个答案:

答案 0 :(得分:0)

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

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

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

因此,您的更新查询应如下所示:

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

注意 - 我根据你的问题做出最佳估计。如果有任何列名错误,或者我误解了外键,那么请在问题中更清楚。

相关问题