Je hebt hiervoor geen lus of zelfs een functie nodig.
Wat u wilt doen, kan worden gedaan in een enkele update-instructie, omdat het totale aantal per territorium kan worden berekend met een enkele aggregatie:
SELECT salesterritoryid, count(*) as total_count
FROM salesperson_t
group by salesterritoryid
Dit kan dan worden gebruikt als bron om de territoriumtabel bij te werken:
UPDATE territory2_t
SET total_sales_person = t.total_count
FROM (
SELECT salesterritoryid, count(*) as total_count
FROM salesperson_t
group by salesterritoryid
) t
WHERE territoryid = t.salesterritoryid;
Een alternatief dat misschien gemakkelijker te begrijpen is, maar langzamer zal zijn voor grotere tabellen, is een update met een co-gerelateerde subquery
UPDATE territory2_t tg
SET total_sales_person = (select count(*)
from salesperson_t sp
where sp.salesterritoryid = tg.territoryid);
Er is een klein verschil tussen de eerste en tweede update:de tweede update de total_sales_person naar 0
(nul) voor die gebieden waar er helemaal geen verkoper is. De eerste zal alleen de telling bijwerken voor territoria die daadwerkelijk aanwezig zijn in de tabel met verkopers.