1.

select sum(case when a.f1='J' then a.f2 else b.f2 end)
from a left outer join b on a.f3=b.f3
left outer join c on c.f4=a.f4

Ggf. ist dieser Sum einfacher, da du a je Satz entscheiden muss.
Da du nun keinen Schlüssel hast, kannst du auch keinen Group By machen.

2.
With ist im skalaren Subselect nicht erlaubt.
Aber ggf. erledigt sich das ja auch durch den obigen Select.

Dies wäre dann vielleicht so:

update a
set a.f5 = coalesce((select sum bla von oben.....), a.f5)
where bla

Zu bedenken ist noch, dass der skalare Select ja noch eine Beziehung zum Updatesatz herstellen sollte da sonst jeder das selbe bekommt, also

set x.f5 = coalesce((select sum bla von oben..... where x.key = a.key), x.f5)
where bla