我有以下表格:
[@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。第二个文档是FARMCOST,即OIGE主表和IGE1子表。
现在,我想根据enter代码、异地选择的块(即IGE1.U_BlockCode )更新块成本表。上面的查询很好,它正在为一个行更新,即一个项,但是当我选择多个具有不同块的行时,就会出现错误。
任何帮助/想法都是非常值得赞赏的。
发布于 2015-01-07 11:13:01
在一个表中更新一批条目的一般语法是从其他表中获取数据
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注:我正在根据你的问题做一个最好的估计。如果有任何列名错误,或者我误解了外键,那么请在你的问题中更清楚地说明。
https://stackoverflow.com/questions/27817655
复制相似问题