Я думаю, что обновляемый CTE с оконными функциями - лучший подход:
WITH cte (NrBL, LgnBL, clientNr) AS (
SELECT t.*,
MAX(CASE WHEN Niveau = 0 THEN clientNr END) OVER (PARTITION BY NrBL, LgnBL) as new_clientNr
FROM #temp t
)
UPDATE cte
SET ClientNr = new_ClientNr
WHERE new_clientNR IS NOT NULL;
Вы можете создать индекс для (NrBL, LgnBL, Niveau, clientNr)
.