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

Voglio ottenere tutta la colonna della tabella Account con questa query ma sta dando un errore

La tua query ha una clausola group by. Se si utilizza una clausola group by nella query, ogni colonna nell'istruzione select deve fare una delle due cose:o deve far parte dell'elenco group by o deve essere un aggregato di qualche tipo (Sum , Conteggio, Media, Max, ecc.). Se non lo fai, SQL non sa cosa fare con la colonna. Nel tuo caso Accounts.regno e Accounts.model sono elencati nella selezione, ma non sono nel gruppo per clausola e non sono aggregati, da qui il tuo errore.

Supponiamo per il momento di avere due record di account con lo stesso nome account e slacc, ma Regno (o modello) diverso. La clausola group by dice che devono essere uniti in un record per la visualizzazione, ma non hai detto a SQL come farlo. Non importa se i dati non sono così, SQL cerca prima possibili errori.

In questo caso, probabilmente vuoi solo raggruppare tutti i dettagli. Il modo più semplice è assicurarsi di aggiungere tutte le colonne necessarie al gruppo, in questo modo

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

Questo risolverà l'errore, ma fa un raggruppamento extra che non ti serve e diventerebbe molto ingombrante se avessi molte più colonne che volevi dall'account, poiché dovresti aggiungerle tutte. Un altro modo per gestirlo consiste nell'utilizzare la quantità minima di colonne per la query di gruppo, quindi unire il risultato alla query principale per ottenere le altre colonne. Probabilmente assomiglierebbe a questo

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