[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