Hola que tal tengo el siguiente procedimiento de almacenamiento:
 
CREATE OR REPLACE FUNCTION TopSales(customerCode integer) 
RETURNS SETOF integer AS $body$
DECLARE zCount Integer;
DECLARE zProdCode Integer;
BEGIN
       SELECT count(*) INTO zCount FROM SalesHeaders WHERE custCode=customerCode;
       IF zCount=0 THEN
       zProdCode=-1;
       ELSE
               SELECT ite.prodCode INTO zProdCode FROM Customers cus, SalesHeaders hea, SalesItems ite
               WHERE hea.SalesCode=ite.SalesCode AND hea.custCode=customerCode
               GROUP BY cus.custCode, cus.custName, ite.prodCode
               HAVING max(ite.quantity) >= ALL (SELECT max(ite2.quantity)
                                       FROM SalesHeaders hea2, SalesItems ite2
                                       WHERE hea2.SalesCode=ite2.SalesCode AND hea2.custCode=customerCode
                                       GROUP BY hea2.salesCode);
 
       END IF;
       RETURN NEXT zProdCode;
END
$body$ LANGUAGE plpgsql;
 
Que deberia devolver los productos mas vendidos para cada cliente, el problema es que del cliente 1 se que existen 2 productos mas vendidos, prodCode 1 y 5 pero en la salida de la consulta:
 
SELECT *,TopSales(custCode) from Customers;
 
Solo me aparece el prodCode 5.
 
Podria alguien hecharme una mano?
 
Un saludo y gracias por anticipado. 
  
 

