Sql server 按行将查询从一个文档更新到另一个表

Sql server 按行将查询从一个文档更新到另一个表,sql-server,Sql Server,我有以下表格: [@FARMCOST] OIGE IGE1 ----------- ------ ----------- u_farmname Docnum ItemName u_blockcode DOCentry qty u_cost U_FarmName Price LineTotal

我有以下表格:

[@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
        )
我有两个文件,一个是区块成本;i、 e.[dbo].[FARMCOST]@第二个是出库单,即OIGE主表和IGE1子表

现在,我想根据此处输入的代码更新区块成本表,即IGE1.U_区块代码。 上面的查询工作正常,它正在为一行(即一个项目)更新,但当我选择具有不同块的多行时,我得到了错误


任何帮助/想法都非常值得欣赏。

更新一个表中的一批条目(从其他表中获取数据)的通用语法如下

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

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

请描述一下您的表和列好吗?[@FARMCOST]是持久表的一个有趣的名称-通常您会避免以@符号开头,以避免将其与表变量混淆…嗨,Jamees,在表Blockcost表中,我有3个字段,分别称为BlockCode、Farm name和the cost,1个Farm可以有多个块。其他的表是OIGE和IGE1,现在我想从IGE1更新FarmCost表中的字段Cost,IGE1也有相同的字段BlockCode和Farm Name,上面的查询只对一行有效,但是当我在IGE1中选择多行时,有不同的块,但相同的Farm查询不起作用。嗨,James,我正在开发一个名为SAP B1的应用程序,它有自己的系统表,我们可以选择创建用户定义的表,因此所有用户定义的表都以@sign开头,这里@farmcost是UDT和OIGE,IGE1是分别称为master和child的系统表。您能用这些表中的列名更新您的问题吗?请确定我的列名是FC.farmname、FC.blockcode、FC.Cost from table和OIGE.Docnum from OIGE table以及IGE1.ItemName、IGE1.qty、IGE1.Price、IGE1.LineTotal、IGE1.farmname、IGE1.blockcode from IGE1 table。区块码和农场名称字段是FC和IGE1表中的常见字段。我编辑了您的问题,并为您添加了该信息-但它显然不完整,因为您缺少您在查询中引用的
FC.u_cost
。请更新您的问题,以包括您在查询或更新中使用的所有相关列。嗨,詹姆斯,我是这个社区的新成员,如果我没有清楚地提到我的字段,很抱歉。让我再试一次fc.u_cost和fc.cost、fc.farmname和fc.u_farmname是相同的字段,这里“u_”是用户定义字段的前缀。