Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

quero pegar todas as colunas da tabela Accounts com essa query mas esta dando erro


Sua consulta tem uma cláusula group by. Se você usar uma cláusula group by na consulta, cada coluna na instrução select deve fazer uma das duas coisas - ou deve ser parte do grupo por lista ou deve ser um agregado de algum tipo (Soma , Contagem, Média, Máx, etc). Se você não fizer isso, o SQL não saberá o que fazer com a coluna. No seu caso Accounts.regno e Accounts.model estão listados no select, mas não estão na cláusula group by e não são agregados - daí seu erro.

Suponha que no momento você tenha dois registros de conta com o mesmo nome de conta e slacc, mas Regno (ou modelo) diferente. A cláusula group by diz que eles precisam ser unidos em um registro para exibição, mas você não disse ao SQL como fazer isso. Não importa se os dados não são assim, o SQL procura primeiro os possíveis erros.

Nesse caso, você provavelmente quer apenas todos os detalhes agrupados. A maneira mais simples é apenas garantir que você adicione todas as colunas necessárias ao grupo, assim
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

Isso corrigirá o erro, mas fará um agrupamento extra que você não precisa e seria muito complicado se você tivesse muito mais colunas que desejasse da conta, pois teria que adicioná-las todas. Outra maneira de lidar com isso é usar a quantidade mínima de colunas para a consulta do grupo, depois juntar o resultado disso à sua consulta principal para obter as outras colunas. Isso provavelmente seria algo assim
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