PDA

Ver la Versión Completa : No funciona consulta agrupada


MartinS
26-01-2012, 13:26:15
Hola. Tengo que agrupar una consulta de personal por sector de trabajo. Aparentemente no debería haber inconvenientes pero me da un error. He consultado por los hilos correspondientes del foro y parecería que la instrucción que ejecuto esta bien:

With Filtro do
Begin
Close;
Sql.Clear;
Sql.Add('Select Id, Nombres, NroLegajo, HORTRABAJO, SECTTRABAJO From Agentes');
SQL.Add('GROUP BY SECTTRABAJO');
SQL.Add('Order by apellido');
Open;
End;

a su vez necesito contar cuantos hay en cada grupo pero lo importante es que primero agrupe.

El error que da es Dynamic SQL error code =-104
Dumped xxxxxxx pages of a total 0 database pages. :confused:

Es una base Firebird y Filtro es un IBQuery
Gracias y saludos

guillotmarc
26-01-2012, 15:20:42
Hola.

Hola. Tengo que agrupar una consulta de personal por sector de trabajo. Aparentemente no debería haber inconvenientes pero me da un error. He consultado por los hilos correspondientes del foro y parecería que la instrucción que ejecuto esta bien:

Código Delphi [-] (http://www.clubdelphi.com/foros/#) With Filtro do Begin Close; Sql.Clear; Sql.Add('Select Id, Nombres, NroLegajo, HORTRABAJO, SECTTRABAJO From Agentes'); SQL.Add('GROUP BY SECTTRABAJO'); SQL.Add('Order by apellido'); Open; End;


a su vez necesito contar cuantos hay en cada grupo pero lo importante es que primero agrupe.

El error que da es Dynamic SQL error code =-104
Dumped xxxxxxx pages of a total 0 database pages. :confused:

Es una base Firebird y Filtro es un IBQuery
Gracias y saludos

No, esta consulta no está bien. Cuando haces una consulta con agrupación, todos los campos devueltos tienen que estar o bien bajo una función de agrupación (sum(), min(), max(), ...) o bien dentro de la lista de campos a agrupar (cláusula GROUP BY).

Tu consulta no tiene sentido. ¿ Si quieres agrupar los agentes por SECTTRABAJO, como esperas a la vez que la consulta te devuelva el ID de dichos AGENTES ?.

Probablemente esta consulta sea más parecida a lo que estás buscando :


Select Id, Nombres, NroLegajo, HORTRABAJO, SECTTRABAJO
From Agentes
Order by SECTTRABAJO, apellido


Saludos.

MartinS
26-01-2012, 15:50:53
Hola. Ahora sí. ya comprendí cual es el error.

la idea era que me diera la cantidad de agentes que hay en cada sector y gracias a tu respuesta descifre, aunque parezca mentira, lo que realmente necesitaba. Lo resolví asi:

With Filtro do
Begin
Close;
Sql.Clear;
Sql.Add('Select SectTrabajo, count(Id) As Total');
Sql.Add('From Agentes');
Sql.Add('Group By SectTrabajo');
Open;
End;

ahora puedo ver en un Dbgrid cuantos empleados tiene cada sector. Gracias!!! ;)