Din forespørgsel har en gruppe efter klausul. Hvis du bruger en gruppe efter klausul i forespørgslen, så skal hver kolonne i select-sætningen gøre en af to ting - enten skal den være en del af gruppe for liste, eller den skal være en aggregat af en eller anden art (Sum , Count, Avg, Max osv.). Hvis du ikke gør dette, ved SQL ikke, hvad de skal gøre med kolonnen. I dit tilfælde er Accounts.regno og Accounts.model opført i selektionen, men de er ikke i gruppen efter klausul, og de er ikke aggregater - derfor din fejl.
Antag for øjeblikket, at du har to kontoposter med samme kontonavn og slacc, men forskellig Regno (eller model). Gruppen for klausulen siger, at de skal sammenføjes i én post for at blive vist, men du har ikke fortalt SQL, hvordan det skal gøres. Det er lige meget om dataene ikke er sådan, SQL leder efter mulige fejl først.
I dette tilfælde vil du sandsynligvis bare have alle detaljerne grupperet. Den enkleste måde er bare at sørge for at tilføje alle de nødvendige kolonner til gruppen ved at gøre sådan
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
Dette vil rette fejlen, men foretager ekstra gruppering, du ikke har brug for, og det ville blive meget besværligt, hvis du havde mange flere kolonner, du ville have fra kontoen, da du skulle tilføje dem alle. En anden måde at håndtere det på er at bruge det mindste antal kolonner til gruppeforespørgslen, og derefter forbinde resultatet af det med din hovedforespørgsel for at få de andre kolonner. Dette ville sandsynligvis se nogenlunde sådan her ud
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