sql >> Base de Datos >  >> RDS >> Sqlserver

quiero obtener todas las columnas de la tabla Cuentas con esta consulta pero está dando error

Su consulta tiene una cláusula group by. Si usa una cláusula group by en la consulta, entonces cada columna en la declaración de selección debe hacer una de dos cosas:debe ser parte de la lista group by o debe ser un agregado de algún tipo (Suma , Recuento, Promedio, Máx., etc.). Si no hace esto, SQL no sabe qué hacer con la columna. En su caso, Accounts.regno y Accounts.model se enumeran en la selección, pero no están en la cláusula group by y no son agregados, de ahí su error.

Suponga por el momento que tiene dos registros de cuenta con el mismo nombre de cuenta y slacc, pero diferente Regno (o modelo). La cláusula group by dice que deben unirse en un registro para mostrar, pero no le ha dicho a SQL cómo hacerlo. No importa si los datos no son así, SQL busca posibles errores primero.

En este caso, probablemente solo desee agrupar todos los detalles. La forma más sencilla es asegurarse de agregar todas las columnas necesarias al grupo, así

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

Esto solucionará el error, pero hace una agrupación adicional que no necesita, y sería muy engorroso si tuviera muchas más columnas que desea de la cuenta, ya que tendría que agregarlas todas. Otra forma de manejarlo es usar la cantidad mínima de columnas para la consulta de grupo, luego unir el resultado de eso a su consulta principal para obtener las otras columnas. Esto probablemente se vería así

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