Usar subquerys es de la forma más sencilla de hacer un código lento. Es preferible usar JOINs en su lugar... Pero usar producto cartesiano es peor!!, una vez más la solución es usar JOINS. Prueba algo como esto, que soluciona ambos problemas:
Código:
UPDATE T1
SET cantsalida=cast(sum(isnull(ds.cantentrega,0))/4 as int)
FROM #tempo t1
INNER JOIN dsalidaalmacen ds
ON ds.coditem=t1.coditem
INNER JOIN salidaalmacen s
ON ds.nrosalida=s.nrosalida
WHERE fechasalida<=getdate()
and fechasalida>=(GETDATE()-120 )
El Where lo puedes hacer un poco más "estilizado" con algo como:
Código:
WHERE fechasalida BETWEEN getdate() AND DATEADD(Day, -120, getdate())
PD. El código es al vuelo, probablemente tengas que ajustarlo un poco.