Din fråga har en grupp för klausul. Om du använder en group by-sats i frågan, måste varje kolumn i select-satsen göra en av två saker - antingen måste den vara en del av gruppen för lista, eller så måste den vara ett aggregat av något slag (Summa , Count, Avg, Max, etc). Om du inte gör detta vet SQL inte vad den ska göra med kolumnen. I ditt fall är Accounts.regno och Accounts.model listade i urvalet, men de är inte i gruppen för klausul och de är inte aggregat - därav ditt fel.
Antag för tillfället att du har två kontoposter med samma kontonamn och slacc, men olika Regno (eller modell). Group by-klausulen säger att de måste sammanfogas till en post för visning, men du har inte berättat för SQL hur man gör det. Det spelar ingen roll om data inte är så, SQL letar efter möjliga fel först.
I det här fallet vill du förmodligen bara ha alla detaljer grupperade. Det enklaste sättet är bara att se till att du lägger till alla kolumner som behövs i gruppen genom att så här
select Accounts.name, Accounts.regno, Accounts.model, Accounts.slacc, count(servicing.dt) as total
from Accounts
left outer join servicing on Accounts.slacc = servicing.slacc
group by Accounts.slacc, Accounts.name, Accounts.regno, Accounts.model
Detta kommer att åtgärda felet, men gör extra gruppering som du inte behöver, och det skulle bli väldigt besvärligt om du hade många fler kolumner du ville ha från kontot, eftersom du skulle behöva lägga till alla. Ett annat sätt att hantera det är att använda det minsta antalet kolumner för gruppfrågan och sedan sammanfoga resultatet av det till din huvudfråga för att få de andra kolumnerna. Det här skulle förmodligen se ut ungefär så här
select Accounts.name, Accounts.regno, Accounts.model, Accounts.slacc, Totals.Total
from Accounts
left outer join
( Select slacc, count(dt) as total
from servicing
group by slacc
) Totals on Totals.slacc = Accounts.slacc