GARANTIR DESCONTO

Fórum Select com SUM!! Meio Complicado!! #272941

17/03/2005

0

Seguinte tenho as seguinte tabelas: PRODUTO, TAB1, TAB2

PRODUTO
...CODPROD
...NOMEPROD
...VALOR

TAB1
...CODPROD
...QTDEPROD

TAB2
...CODPROD
...QTDEPROD

Tava querendo fazer um relatorio pra trazer o valor pago nos produtos!!
tipow assim:

select sum(P.VALOR * T1.QTDEPROD), P.NOMEPROD FROM PRODUTO P
left join TAB1 T1 on (T1.CODPROD = P.CODPROD)
group by P.NOMEPROD

assim funciona pra uma tabela, mas eu quero para as 2 tabelas saca!

tipo assim:

select sum(P.VALOR * T1.QTDEPROD), P.NOMEPROD FROM PRODUTO P
left join TAB1 T1 on (T1.CODPROD = P.CODPROD)
group by P.NOMEPROD
union all
select sum(P.VALOR * T2.QTDEPROD), P.NOMEPROD FROM PRODUTO P
left join TAB1 T2 on (T2.CODPROD = P.CODPROD)
group by P.NOMEPROD

O problema eh que assim ele repete o produto!!!

prod1 valor 10
prod2 valor 20
prod1 valor 30

e eu queria que ficasse somado junto prod1 com prod1 e etc.

algo assim:

select sum(P.VALOR * (T1.QTDEPROD + T2.QTDEPROD)), P.NOMEPROD FROM PRODUTOS P
left join TAB1 T1 ON (T1.CODPROD = P.CODPROD)
left join TAB2 T2 ON (T2.CODPROD = P.CODPROD)
group by P.NOMEPROD

o problema eh que assim nao da certo! ele traz uma soma invalida e em apenas um dos produtos listados e resto traz null!!

to usando Firebird 1.03 alguma coisa!!

sera que tem como fazer isso?? algum sum dentro de outro sum, com union ou sei la???


Fred

Fred

Responder

Posts

17/03/2005

Emerson Nascimento

sugiro que você instale o FB 1.5.1 daí vc poderá utilizar a função COALESCE():

select P.NOMEPROD, 
       MAX(P.VALOR) * (COALESCE(SUM(T1.QTDEPROD),0) + COALESCE(SUM(T2.QTDEPROD),0)) VALORTOTAL,
FROM PRODUTOS P 
left join TAB1 T1 ON (T1.CODPROD = P.CODPROD) 
left join TAB2 T2 ON (T2.CODPROD = P.CODPROD) 
group by P.NOMEPROD



Responder

Gostei + 0

17/03/2005

Fred

Valeu pela ajuda!! Faz dias que estou ensaiando pra passar pro Firebird 1.5, mas to meio enrolado!! Quais seriam as alterações que eu teria que fazer!! quais seriam os problemas?? e o acesso pelo DBExpress?


Responder

Gostei + 0

17/03/2005

Faelcavalcanti

Cara. Já me quebrei também pra fazer este tipo de coisa mas vê se assim funciona :
SELECT (SUM(P.VALOR * T1.QTDEPROD) + SUM(P.VALOR * T2.QTDEPROD)) AS TOTAL, P.NOMEPROD FROM PRODUTO P, TAB1 T1, TAB2 T2 WHERE P.CODPROD = T1.CODPROD AND P.CODPROD = T2.CODPROD AND T1.CODPROD = T2.CODPROD GROUP BY P.NOMEPROD ORDER BY P.NOMEPROD


Agora é o seguinte caso não consigas, tenta tipow fazer com duas queries, por exemplo: uma query tu fazia com a TAB1:

SELECT SUM(P.VALOR * T1.QTDEPROD) AS TOTAL, P.NOMEPROD FROM PRODUTO P, TAB1 T1, TAB2 T2 WHERE P.CODPROD = T1.CODPROD AND P.CODPROD = T2.CODPROD AND T1.CODPROD = T2.CODPROD GROUP BY P.NOMEPROD ORDER BY P.NOMEPROD


e a outra com a TAB2 tipow:

SELECT SUM(P.VALOR * T2.QTDEPROD) AS TOTAL, P.NOMEPROD FROM PRODUTO P, TAB1 T1, TAB2 T2 WHERE P.CODPROD = T1.CODPROD AND P.CODPROD = T2.CODPROD AND T1.CODPROD = T2.CODPROD GROUP BY P.NOMEPROD ORDER BY P.NOMEPROD


Eu sei que fica melhor jogar tudo em uma query só devido a componente por grupo e depois fazer o sincronismo. Mas pra não complicar não curto muito utilizar JOIN, não sei o lado benéfico que tanta gente usa principalmente para relatórios.

Espero ter ajudado!!!


Responder

Gostei + 0

17/03/2005

Emerson Nascimento

você não precisará fazer nenhuma alteração por conta da troca da versão FB, mas recomenda-se fazer um bkp e restaurar pelo 1.5.1/2.


Responder

Gostei + 0

18/03/2005

Fred

Deu certo nao em faecavalcante, mas valeu!!!


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar