Hola creo que por la cantidad de datos, deberias realizar un procediemto almacenado
Código SQL
[-]CREATE PROCEDURE NEW_PROCEDURE
RETURNS(AREA VARCHAR(10),
ESTADO_A INTEGER,
ESTADO_P INTEGER)
AS
DECLARE VARIABLE V_ESTADO CHAR(1);
BEGIN
ESTADO_A = 0;
ESTADO_P = 0;
FOR
SELECT DISTINCT
E.AREA,
P.ESTADO
FROM ESTRUCTURA E
LEFT JOIN COMPRAS P
ON ( (E.EMPRESA = P.EMPRESA) AND (E.AREA = P.AREA) AND (E.SUBAREA = P.SUBAREA) )
WHERE E.EMPRESA = 'emp1'
INTO :AREA,
:V_ESTADO
DO BEGIN
IF (V_ESTADO = 'A') THEN
ESTADO_A = 1;
IF (V_ESTADO = 'P') THEN
ESTADO_P = 1;
SUSPEND;
END
END
Luego de esto podrias hacer un sql con el resultado del procedimiento
Código SQL
[-]SELECT A.AREA, SUM(A.ESTADO_A), SUM(A.ESTADO_P) FROM NEW_PROCEDURE A
Agrega dos indices en la Tabla ESTRUCTURA campo ESTADO ascendente y descendente respectivamente, asi como los campos que estan despues del ON (E.EMPRESA, P.EMPRESA, E.AREA...)
Espero que te sirva