sql >> Database teknologi >  >> RDS >> Sqlserver

Jeg vil have hele kolonnen i konti-tabellen med denne forespørgsel, men den giver fejl

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



  1. Henter indeks over element i PL/SQL-samling

  2. SQL flertal/ental søgninger

  3. dublerede resultater

  4. Opret tabelvariabel i MySQL