[firebase-br] Ajuda com SQL

José Filho (UOL) jfilho.bg em uol.com.br
Sex Jan 27 11:54:47 -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): 0604-3, 26/01/2006
Tested on: 27/1/2006 10:54:49
avast! - copyright (c) 1988-2005 ALWIL Software.
http://www.avast.com





Mais detalhes sobre a lista de discussão lista