[firebase-br] Ajuda com SQL: ainda procurando solução
José Filho (UOL)
jfilho.bg em uol.com.br
Seg Jan 30 12:10:01 -03 2006
Bom dia, comunidade firebird!
Tenho uma aplicação que faz o controle de recebimento de leite de um laticínio. Foram utilizadas as ferramentas D7, o trio SQLDataSet, DataSetProvider, ClientDataSet e o FB 1.5.3, para o seu desenvolvimento. Me deparei com a seguinte situação:
1) Existe no BD três tabelas (além de tantas outras) onde são cadastrados os produtores de leite (PRODUTORES), as linhas de leite (LINHAS) e o recebimento diário de leite (RECLEITE);
2) A tabela PRODUTORES possui como chave primária o campo PRO_CODIGO.
3) A tabela LINHAS possui como chave primária o campo LIN_CODIGO. Possui, ainda, um campo do tipo "lógico" chamado LIN_PAGAFRETE;
4) A tabela PRODUTORES está relacionada com a tabela LINHAS através do campo PRO_LINHA. Ela possui, também, outros campos para o cálculo de taxas de acréscimo e desconto: bonificação e frete;
5) A tabela RECLEITE está relacionada com as tabelas PRODUTORES e LINHAS através dos campos LEI_PRODUTOR e LEI_LINHA, respectivamente;
Existe uma informação a saber: o produtor pode entregar leite em outra linha que não seja a que ele esteja cadastrado. Aí está o problema com minha SQL. Segue o código abaixo:
SELECT RL.LEI_PRODUTOR, P.PRO_NOME, P.PRO_CNPJCPF, P.PRO_COTALITRO,
P.PRO_COTAPERC, P.PRO_BONIFICAVLR, P.PRO_BONIFICAPERC, P.PRO_TANQUE,
P.PRO_TAXATANQUE, P.PRO_FRETEPERC, P.PRO_FRETEVALOR,
SUM(CASE L.LIN_PAGAFRETE
WHEN 'True' THEN
CASE
WHEN P.PRO_FRETEVALOR = 0 THEN ((P.PRO_FRETEPERC * (RL.LEI_BOM + RL.LEI_ACIDO)) / 100)
WHEN P.PRO_FRETEVALOR > 0 THEN (P.PRO_FRETEVALOR * (RL.LEI_BOM + RL.LEI_ACIDO))
END
WHEN 'False' THEN 0
END) AS PRO_FRETE,
SUM(RL.LEI_BOM) AS LEI_BOM, SUM(RL.LEI_ACIDO) AS LEI_ACIDO,
L.LIN_CODIGO, L.LIN_CARRETEIRO FROM RECLEITE RL
LEFT JOIN PRODUTORES P
ON (P.PRO_CODIGO = RL.LEI_PRODUTOR)
LEFT JOIN LINHAS L
ON (L.LIN_CODIGO = P.PRO_LINHA)
WHERE RL.LEI_DATA BETWEEN '01.01.2006' AND '31.01.2006'
GROUP BY RL.LEI_PRODUTOR, P.PRO_NOME, P.PRO_CNPJCPF, P.PRO_COTALITRO,
P.PRO_COTAPERC, P.PRO_BONIFICAVLR, P.PRO_BONIFICAPERC, P.PRO_TANQUE,
P.PRO_TAXATANQUE, P.PRO_FRETEPERC, P.PRO_FRETEVALOR, L.LIN_CODIGO,
L.LIN_CARRETEIRO
ORDER BY L.LIN_CARRETEIRO, P.PRO_NOME
De acordo com o código acima, se o produtor é cadastrado em uma linha que não paga frete, entrega leite nessa linha e em outra que paga frete, minha SQL retorna o cálculo do frete zerado, obviamente. O que quero é saber como fazer pra SQL calcular o frete do leite que foi entregue na linha que o paga. Grato pela ajuda de quem se dispuser.
[ ]'s
José Filho
Barra do Garças-MT
---
avast! Antivirus: Outbound message clean.
Virus Database (VPS): 0605-0, 29/01/2006
Tested on: 30/1/2006 11:10:02
avast! - copyright (c) 1988-2005 ALWIL Software.
http://www.avast.com
Mais detalhes sobre a lista de discussão lista