Ver Mensaje Individual
  #9  
Antiguo 10-10-2007
Avatar de Gabo
[Gabo] Gabo is offline
Miembro Premium
 
Registrado: mar 2007
Ubicación: Murcia (España)
Posts: 684
Reputación: 20
Gabo Va por buen camino
Cita:
Empezado por Lepe Ver Mensaje
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
Ese era un punto en el que tenía dudas. No sabía si de alguna manera se podían pedir datos sin agruparlos. Gracias.

Cita:
Empezado por Lepe Ver Mensaje
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.
Lamentablemente Interbase (al menos la versión 6) no me permite hacer consultas a consultas, es decir:

Código SQL [-]
Select xyz from (Select xyz from xyz)

Ya que con eso si lo podría lograr.

Cita:
Empezado por Lepe Ver Mensaje
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
[] Reconozco que los procedimiento almacenados no son mi fuerte[/]
Pero veo que ahí está la solución al problema, asi que...

Lamentablemente hoy no estoy en la oficina, pero mañana, en cuanto llegué, probaré eso y les contaré...

Gracias por la ayuda!!!!
__________________
Saludos,
Gabo

A menos que se indique lo contrario, el código estará hecho en C++Builder.

Última edición por Gabo fecha: 10-10-2007 a las 12:03:42.
Responder Con Cita