Ver Mensaje Individual
  #7  
Antiguo 10-10-2007
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Reputación: 31
Lepe Va por buen camino
Es que la función de agrupación funciona así y punto.... no hay más vueltas. Si incluyes una función Sum, avg,etc, debes poner todos los demás campos en el group by

Si por un lado necesitas sumas y además otros campos, realiza 2 consultas, una con el Sum y la otra con los datos que necesitas.

En casos complejos, se puede usar un Procedimiento almacenado (si tu SGBBDD lo permite).


Edito: acabo de ver que usas Interbase, aquí va un ejemplo de un SP de selección:
Código SQL [-]
Create procedure Dame_gente() 
returns
( ELpersonal_nombre  varchar(30),
  ELpersonal_codigo integer,
  ELdemanda_personal numeric(10,2))
as
begin
   for select personal_codigo, sum(demanda_personal)
   from demanda_personal
   group by personal_codigo
   into :ELpersonal_codigo, :ELdemanda_personal do
   begin
   
 /* este es el truco, suponemos que no nos dejaba incluir el nombre porque al usar
    varias tablas lo debíamos de meter en el Group by y no nos daba los resultados
    que esperábamos. Pues lo hacemos en dos partes:
    - Primero hacemos un select con las sumas
    - Después buscamos en las demás tablas los datos para completar el registro que queremos devolver
      con todos los datos juntos
 */
     select personal_nombre 
     from personal
     where codigo_personal = :ELpersonal_codigo
     into :Elpersonal_nombre;
   
     suspend;  //devolvemos todos los parametros que han sido asignados
  end;
end;

Forma de uso:
Código Delphi [-]
  qry1.sql.text := 'select * from Dame_gente';
  qry1.Open;

Como ves en el ejemplo, puedes hacer lo que te apetezca, realmente lo que se hace es construir un registro a mano, como si fuera un puzzle, añadiendo los valores que nos apetezca.


Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.

Última edición por Lepe fecha: 10-10-2007 a las 11:09:21.
Responder Con Cita