[firebase-br] Cantu, pelo menos, me diz se tem jeito

José Filho (UOL) jfilho.bg em uol.com.br
Ter Jan 31 15:46:25 -03 2006


Eduardo, Jeferson, Jony... Obrigado a todos pelas dicas. Tentei entender melhor a dica do Eduardo e, no final das contas, deu certo. Hehehehe

Na verdade, Eduardo, o meu CASE não estava de todo maluco (Hehehe). Apenas estava no lugar errado. Eu já tinha tentado fazer da forma como você tinha me dado a dica, mas acredito que eu devia estar colocando algum campo no lugar errado. O código ficou assim:

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,
(SELECT SUM(CASE LN.LIN_PAGAFRETE
              WHEN 'True' THEN
                CASE
                  WHEN PT.PRO_FRETEVALOR = 0 THEN ((PT.PRO_FRETEPERC * (LT.LEI_BOM + LT.LEI_ACIDO)) / 100)
                  WHEN PT.PRO_FRETEVALOR > 0 THEN (PT.PRO_FRETEVALOR * (LT.LEI_BOM + LT.LEI_ACIDO))
                END
              WHEN 'False' THEN 0
            END) FROM RECLEITE LT
LEFT JOIN LINHAS LN
ON (LN.LIN_CODIGO = LT.LEI_LINHA)
LEFT JOIN PRODUTORES PT
ON (PT.PRO_CODIGO = LT.LEI_PRODUTOR)
WHERE (LT.LEI_DATA BETWEEN '01.01.2006' AND '31.01.2006')
AND (LT.LEI_PRODUTOR = RL.LEI_PRODUTOR)) 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

[ ]'s

José Filho
Barra do Garças-MT



----- Original Message ----- 
From: "Eduardo Jedliczka (TeamFB)" <jedyfb em gmail.com>
To: "FireBase" <lista em firebase.com.br>
Sent: Tuesday, January 31, 2006 11:45 AM
Subject: Re: [firebase-br] Cantu, pelo menos, me diz se tem jeito


José, Seu select é muito grande para compreender de forma rápida, e 
principalmente "reescrever".

Mas logo de cara dá para perceber que você tem duas situações distintas. 
Sendo assim, seu select está errado.

Há várias soluções possíveis, onde as duas melhores são Union e Sub-Select. 
Posso estar enganado, mas utilizar Case neste select só deixa o resultado 
doido.


---
avast! Antivirus: Outbound message clean.
Virus Database (VPS): 0605-1, 30/01/2006
Tested on: 31/1/2006 14:46:26
avast! - copyright (c) 1988-2005 ALWIL Software.
http://www.avast.com





Mais detalhes sobre a lista de discussão lista