sql >> Database >  >> RDS >> Sqlserver

ik wil alle kolommen van de Accounts-tabel met deze query krijgen, maar het geeft een fout

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



  1. MariaDB GROUP_CONCAT()

  2. Een enkele rij selecteren in MySQL

  3. Hoe bepalen of SSL wordt gebruikt in een MySql-verbinding?

  4. Wat is databasetesten en hoe voer je het uit?