Re: [firebase-br] Fw: Sql Consulta muito Difícil (iniciante)

Everton Garcia ertgarcia.listas em gmail.com
Dom Out 23 13:40:22 -03 2005


Carlos Eduardo,

Acho que a Stored Procedure abaixo, resolve seu problema. Basta passar
o ano como parâmetro e ele te dá o resumo do ano.


/***********************************************************************************
**  Início
***********************************************************************************/

SET TERM ^ ;

CREATE PROCEDURE SP_RELATORIO_CONHECIMENTO (
    ANO INTEGER)
RETURNS (
    CONHECIMENTO VARCHAR(50),
    JANEIRO INTEGER,
    FEVEREIRO INTEGER,
    MARCO INTEGER,
    ABRIL INTEGER,
    MAIO INTEGER,
    JUNHO INTEGER,
    JULHO INTEGER,
    AGOSTO INTEGER,
    SETEMBRO INTEGER,
    OUTUBRO INTEGER,
    NOVEMBRO INTEGER,
    DEZEMBRO INTEGER,
    TOTAL INTEGER)
AS
DECLARE VARIABLE NCOUNT INTEGER;
DECLARE VARIABLE SOMA INTEGER;
begin
  for select distinct cli.conheceu
      from clientes cli
      into :conhecimento
  do begin
     ncount = 1;
     total = 0;
     while (ncount <=12) do
     begin
       select count(cm.ncom)
       from comanda cm
            inner join clientes cl
            on(cm.codcli = cl.codcli)
            and(cl.conheceu = :conhecimento)
       where extract(month from cm.data) = :ncount
         and extract(year from cm.data) = :ano
       into :soma;

       if (:ncount = 1) then
         janeiro = :soma;
       else if (:ncount = 2) then
         fevereiro = :soma;
       else if (:ncount = 3) then
         marco = :soma;
       else if (:ncount = 4) then
         abril = :soma;
       else if (:ncount = 5) then
         maio = :soma;
       else if (:ncount = 6) then
         junho = :soma;
       else if (:ncount = 7) then
         julho = :soma;
       else if (:ncount = 8) then
         agosto = :soma;
       else if (:ncount = 9) then
         setembro = :soma;
       else if (:ncount = 10) then
         outubro = :soma;
       else if (:ncount = 11) then
         novembro = :soma;
       else if (:ncount = 12) then
         dezembro = :soma;

       total = :total + :soma;
       ncount = :ncount + 1;
     end
     suspend;
  end
end
^

SET TERM ; ^

/***********************************************************************************
**  Fim
***********************************************************************************/



[]´s

Everton Garcia




Mais detalhes sobre a lista de discussão lista