[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