[firebase-br] Montar SQL

Zottis bzottis em ig.com.br
Sex Out 14 13:23:12 -03 2011


Pessoal, estou com um SQL que preciso montar

Então, vou tentar descrever ao máximo o problema

Agradeço desde já a ajuda.

Tenho uma tabela de grupos
Ex: 1 – Cianorte
      2 – Curitiba
      3 – Nova Andradina........


Tenho uma tabela de Clientes com os campos
   COD_CLIENTE(PK),
  Intervalo_Dias(Pode ser 7, 14,30, 90,180 Dias para a coleta de resíduos),
ATIVO (Pode ser ‘S’ ou ‘N’)
E o Campo COD_GRUPO(FK) Ligado à Tabela Grupos,

Tenho outra tabela Chamada FAR_MTR
  Onde tem
COD_FAR(PK)
COD_CLIENTE(FK)
Peso_Coletado,
COD_GRUPO,
Data_Prevista,
Data_Coleta



Preciso fazer uma Busca onde retorne o Total de Clientes ativos, o Total por
Grupo  
 O Peso Coletado Total e Por Intervalo de Dias

O que eu estou fazendo é assim:

Faço uma busca em um componente assim:

PS: O Coalesce é o mesmo de VLR do Oracle
Select G.codigo, g.grupo ,
   (select coalesce(count(C1.cod_cliente),0) from clientes C1 where 
C1.ativo = 'S' and C1.data_cad <= :DataF and C1.cod_grupo = G.codigo)Total,
   (select coalesce(count(C1.cod_cliente),0) from clientes C1 where 
C1.ativo = 'S' and C1.data_cad <= :DataF)Total_Geral,

   (select coalesce(sum(F.peso_coletado),0) from far_mtr F   where 
F.data_coleta between :dataI and :DataF and F.cod_grupo = G.codigo)Peso_Col,
   (select coalesce(sum(F1.peso_coletado),0) from far_mtr F1 where 
F1.data_coleta between :dataI and :DataF)Peso_Col_Geral,

   (select coalesce(count(F.cod_far_mtr),0) from far_mtr F   where 
F.data_previsao_coleta between :dataI and :DataF and F.cod_grupo =
G.codigo)Qtd_MTR_Prev,
  (select coalesce(count(F1.cod_far_mtr),0) from far_mtr F1 where 
F1.data_previsao_coleta between :dataI and :DataF)QTD_MTR_Prev_geral,

   (select coalesce(count(F.cod_far_mtr),0) from far_mtr F   where  
F.data_coleta between :dataI and :DataF and F.cod_grupo =
G.codigo)Qtd_MTR_Col,
   (select coalesce(count(F1.cod_far_mtr),0) from far_mtr F1 where 
F1.data_coleta between :dataI and :DataF)Qtd_MTR_Col_Ger,

   (select coalesce(count(F.cod_far_mtr),0) from far_mtr F   where  
F.baixado = 'N' and F.data_previsao_coleta between :dataI and :DataF and
F.cod_grupo = G.codigo)Qtd_MTR_AB,
   (select coalesce(count(F1.cod_far_mtr),0) from far_mtr F1 where 
F1.baixado = 'N' and F1.data_previsao_coleta between :dataI and
:DataF)QTD_MTR_AB_Ger

from grupo_cidades G


e depois faço outra Busca em outro Componente deixando a primeira Busca como
máster e a segunda como Detail:
    select C.intervalo_coleta,
             coalesce( Count(C.cod_cliente),0)Ativos,
            (select coalesce(count(C1.cod_cliente),0) from clientes C1
where  C1.ativo = 'S' and C1.data_cad <= :DataF and C1.cod_grupo =
:Grupo)Total,
            ( select coalesce(sum(F.peso_coletado),0) From far_mtr F,
Clientes C2 where F.baixado = 'S'
                and F.data_coleta between :dataI and :DataF   and
F.cod_cliente = C2.cod_cliente
                and F.cod_grupo = :Grupo   )Peso_Col
         From clientes C
           where C.ativo = 'S'
                and C.data_cad <= :DataF
                and C.cod_grupo = :Grupo
         group by C.intervalo_coleta
        Order By C.intervalo_coleta

Depois faço dois Whiles um dentro do outro e jogo em uma grade, o problema é
que esta vindo valores distorcidos no segundo SQL
Exemplo de como ficará na grade(StringGrid)
                                   intervalo       Ativos
Peso Coletado                                               Coletas P/ Unid
Previstas P/ Unid        Abertas P/ Unid          Coletas Geral
Previstas Geral  Abertas Geral
(1)CIANORTE                                   (975/2571) 37,92%
(4.876,500Kg/19.134,720Kg) 25,49%       (489/1011) 48,37%
1011                     (522/1011) 51,63%           1067(47,78%)       2383
522    
                                    0 Dia(s)            2
?
                                    7 Dia(s)            30
?
                                    15 Dia(s)         340
?
                                    30 Dia(s)        537
?
                                    60 Dia(s)        7
?
                                    90 Dia(s)       51
?
                                    180 Dia(s)    7
?
(2)CURITIBA                                    (975/2571) 37,92%
(4.876,500Kg/19.134,720Kg) 25,49%       (489/1011) 48,37%
1011                     (522/1011) 51,63%           1067(47,78%)       2383
522    
                                    0 Dia(s)            2
?
                                    7 Dia(s)            30
?
                                    15 Dia(s)         340
?
                                    30 Dia(s)        537
?
                                    60 Dia(s)        7
?
                                    90 Dia(s)       51
?
                                    180 Dia(s)    7
?              








Mais detalhes sobre a lista de discussão lista