Ver Mensaje Individual
  #12  
Antiguo 18-01-2009
mjjj mjjj is offline
Miembro
 
Registrado: mar 2007
Posts: 652
Reputación: 18
mjjj Va por buen camino
Mcuhas gracias por tu excelente y completa explicación, me quedo todo mucho mas claro, pero siempre surgen nuevas dudas.

El tema de la tablas temporales, es lo mismo que las talbas en memoria?
Estuve leyendo sobre alguno componentes que puedes servir para esto, será necesario instalar algun componente especial, o simplemente se puede generar con algun comando SQL.

Por otro lado, y gracias a la explicación del inner join, es que he tratado de implmentar esta idea a otra consultas dentro de mi aplicación y la verdad es que no me funciona nada de bien. Expongo mi código.

Código Delphi [-]
 IBQUERY6.Close;
 IBQUERY6.SQL.CLEAR;
 IBQUERY6.SQL.ADD('select area, sum(monto),');
 IBQUERY6.SQL.ADD('(SELECT SUM(MONTO_COMPR) FROM COMPRAS WHERE AREA = P.AREA AND ano=:ano AND mes=:mes AND EMPRESA =:EMPRESA');
 IBQUERY6.SQL.ADD('AND OFICINA ='+QUOTEDSTR(SCOMBOBOX3.TEXT));
 IBQUERY6.SQL.ADD('AND ESTADO ='+QUOTEDSTR('F')+'),');
 IBQUERY6.SQL.ADD('(SELECT COUNT(ESTADO) FROM COMPRAS WHERE AREA  = P.AREA AND ano=:ano AND mes=:mes AND EMPRESA =:EMPRESA');
 IBQUERY6.SQL.ADD('AND OFICINA ='+QUOTEDSTR(SCOMBOBOX3.TEXT));
 IBQUERY6.SQL.ADD('AND ESTADO ='+QUOTEDSTR('P')+')');
 IBQUERY6.SQL.ADD('from PRESUPUESTO P where EMPRESA =:EMPRESA');
 IBQUERY6.SQL.ADD('AND ano=:ano AND mes=:mes');
 IBQUERY6.SQL.ADD('AND OFICINA ='+QUOTEDSTR(INTTOSTR(OFI)));
 IBQUERY6.SQL.ADD('group BY AREA');
 IBQUERY6.parambyname('empresa').AsString:=empresa;
 IBQUERY6.parambyname('ano').asinteger:=calendar1.year;
 IBQUERY6.parambyname('mes').asinteger:=calendar1.month;
 ibquery6.Open;

lo que funciona bien, pero es relativamente lento, el mismo problema anterior, Select anidados, pero no se como hacerlo de otra manera.... ayuda porfa!!

intente utilizando esto:

Código SQL [-]
select
p.area , sum(P.monto) , sum(case when estado = 'F' then monto_compr else 0 end),
count(case when estado = 'P' then monto_compr else 0 end)
from presupuesto p inner join compras c on c.area = p.area and c.ano = p.ano
and p.mes = c.mes AND P.EMPRESA = C.EMPRESA
where p.mes = '2009'
and p.ano =   '1'
and P.empresa = 'emp'
AND P.oficina = '1'
AND C.OFICINA = 'SANTIAGO'
GROUP BY AREA

Me arroja valores que no tienen nada que ver, obvimante no funciona, el porqe es el que no se.

Lo que intento hacer es lo siguiente:

Un distado de todas la distintas area (tabla presupuesto), además de la sumatoria de lo compra (tabla compra estado = 'F') y la cantidad de compras excedidas (tabla compras estado ='P')

Ojala me puedan echar una manito con esta consulta.

Gracias
Responder Con Cita