我正在尝试将PO_VEND_ITEM中的V.PUR_UNIT更新为等于PO_RECVR_HIST_LIN中的R.RECVD_UNIT的值,但我想选择R.RECVD_UNIT作为最后一次收到的日期 我已经在下面创建了脚本,但是仍然出现错误
Update
PO_VEND_ITEM
Set
V.PUR_UNIT = R.RECVD_UNIT
FROM
PO_RECVR_HIST_LIN R
INNER JOIN
PO_VEND_ITEM V
ON
V.ITEM_NO = R.ITEM_NO
GROUP BY
V.PUR_UNIT,
V.ITEM_NO
HAVING
R.RECVR_DAT = MAX(R.RECVR_DAT)
任何建议请
答案 0 :(得分:0)
如果您的SQL提供了表和别名,则需要使用别名,而不是其他任何地方的表名,因此更新应该是UPDATE V,而不是UPDATE PO_VEND_ITEM。
无论如何,那仍然无法解决您的问题。您无法更新汇总查询-汇总的全部目的是将行分组在一起,因此不再链接原始行-它不知道要更新哪些行。
更新如下,删除了不正确的数据。
如果要按一列排序,但要使用另一列,则聚合通常不会起作用。相反,在子查询中,通过给其一个行号对需要使用的数据进行排序,然后仅连接到行1-即具有所需数据的行。这只会更新有匹配PO_RECVR_HIST_LIN行的PO_VEND_ITEM行-如果要更新所有行,则将内部联接更改为左外部联接,而没有匹配行的任何联接都将设置为NULL。
UPDATE V SET PUR_UNIT = R.QTY_UNIT
FROM PO_VEND_ITEM V
INNER JOIN (
SELECT ITEM_NO, QTY_UNIT, ROW_NUMBER() OVER (PARTION BY ITEM_NO ORDER BY RECVR_DAT DESC) RowNo
FROM PO_RECVR_HIST_LIN
) R ON R.ITEM_NO = V.ITEM_NO AND R.RowNo = 1;