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