Три проблемы с этим запросом:
- Если нет результатов для коррелированного подзапроса, он возвращает NULL, который нельзя добавить в PTAmount.
- Если естьнесколько результатов для подзапроса, он также не сможет добавить, так как из подзапроса в скобках может быть возвращено только одно значение.
- Нельзя псевдоним таблицу UPDATE рядом с UPDATE.ключевое слово.Вам нужно предложение FROM после SET, чтобы дать ему псевдоним "ptm".
Попробуйте вместо этого:
UPDATE PayrollTotals SET PTAmount = PTAmount +
(SELECT SUM(pts.PTAmount) FROM PayrollTotals pts WHERE
pts.PTACID = 38
AND pts.PTAmount > 0
AND pts.PTEmpID = ptm.PTEmpID)
FROM
PayrollTotals AS ptm
WHERE
PTACID = 42
SUM () гарантирует, что вы получитепо крайней мере, 0 результат из подзапроса, и если есть несколько результатов, он суммирует их, прежде чем добавить их в ptm.PTAmount.
Кроме того, вам не нужен псевдоним таблицы.Так как PayrollTotals подзапроса имеет псевдонимы pts, вы можете обратиться к обновленной таблице напрямую по ее имени:
UPDATE PayrollTotals SET PTAmount = PTAmount +
(SELECT SUM(pts.PTAmount) FROM PayrollTotals pts WHERE
pts.PTACID = 38
AND pts.PTAmount > 0
AND pts.PTEmpID = PayrollTotals.PTEmpID)
WHERE
PTACID = 42