Uw zoekopdracht heeft een group by-clausule. Als u een group by-clausule in de query gebruikt, moet elke kolom in de select-instructie een van twee dingen doen:ofwel moet het deel uitmaken van de group by-lijst, of het moet een soort aggregaat zijn (Sum , Aantal, Gem, Max, enz.). Als u dit niet doet, weet SQL niet wat te doen met de kolom. In uw geval worden Accounts.regno en Accounts.model vermeld in de select, maar ze staan niet in de group by-clausule en het zijn geen aggregaten - vandaar uw fout.
Stel voor het moment dat je twee accountrecords hebt met dezelfde accountnaam en slacc, maar met verschillende Regno (of model). De group by-clausule zegt dat ze moeten worden samengevoegd tot één record voor weergave, maar je hebt SQL niet verteld hoe dat moet. Het maakt niet uit of de gegevens niet zo zijn, SQL zoekt eerst naar mogelijke fouten.
In dit geval wilt u waarschijnlijk alle details gegroepeerd hebben. De eenvoudigste manier is om ervoor te zorgen dat u alle benodigde kolommen aan de groep toevoegt door, zoals deze
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
Dit lost de fout op, maar zorgt voor extra groepering die u niet nodig heeft, en het zou erg omslachtig worden als u veel meer kolommen van uw account had, omdat u ze allemaal zou moeten toevoegen. Een andere manier om hiermee om te gaan, is door het minimale aantal kolommen voor de groepsquery te gebruiken en vervolgens het resultaat daarvan bij uw hoofdquery te voegen om de andere kolommen te krijgen. Dit zou er waarschijnlijk ongeveer zo uitzien
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