我有以下表格:
[@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。 上面的查询工作正常,它正在更新一行,即一个项目,但当我选择多行不同的块时,我收到错误。
任何帮助/想法都会非常明显。
答案 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
注意 - 我根据你的问题做出最佳估计。如果有任何列名错误,或者我误解了外键,那么请在问题中更清楚。