Dúvida com código em SLQ...
14/09/2004
0
Situação:
1. Tenho duas tabelas: Venda e VendaProdutos.
2. Na tabela Venda tenho: codigovenda, codigocliente, nomecliente, datavenda, valorvenda.
3. Na tabela VendaProdutos tenho: codigo, codigovenda, codigoproduto, descproduto, valorunitario, quantidade, valortotalproduto.
Problema:
Preciso de uma instrução que faça uma soma do ´valortotalproduto´ onde seja Venda(CodigoVenda) = VendaProduto(CodigoVenda).
Mais claro: preciso do valor total dos produtos para cada venda feita onde eu transfiro este valor total dos produtos da venda para o valor da venda.
Desde já agradeço a ajuda.
Horus
Posts
14/09/2004
Tnaires
Vc não precisa gravar o total da venda na tabela, pois isso vc pode calcular com a seguinte instrução SQL:
SELECT Venda.codigovenda, SUM(VendaProdutos.valortotalproduto) AS Soma FROM Venda, VendaProdutos WHERE VendaProdutos.codigovenda = Venda.codigovenda GROUP BY Venda.codigovenda
Abraços.
P.S. - se vc tá gravando o código do cliente na tabela d vendas, vc não precisa gravar o nome do cliente... Seu banco fica redundante. Da mesma maneira, se vc tá gravando o código do produto na tabela VendaProdutos, vc não precisa gravar a descrição.
14/09/2004
Djjunior
se o vc precisa é só os totais por venda então use
bem acho que daqui já dá pra andar sozinho blz.
mas qualquer coisa é só perguntar
15/09/2004
Horus
Coloquei uma IBQuery no Form e depois na instrução SQL coloquei a sugestão do djjunior.
Problema: a query sempre pega o valor da primeira venda.
Outra dúvida: como eu passo um parâmetro para uma instrução SQL no IB/FB???
Obrigado pela ajuda.
15/09/2004
Rodolpho123
Para passar parâmetros, dentro do seu código:
IBQuery1.ParamByName(´Seu_Parametro´).Value := Seu_valor;
15/09/2004
Tnaires
Acho q não
[quote:c7bd357a68=´Adaptado de http://www.postgresql.org.br/tutorial2/tutorial-agg.html´] É importante compreender a interação entre as agregações e as cláusulas WHERE e HAVING do SQL. A diferença fundamental entre WHERE e HAVING é esta: o WHERE seleciona as linhas de entrada antes dos grupos e agregações serem computados (portanto, controla quais linhas irão para o computo da agregação), enquanto o HAVING seleciona grupos de linhas após os grupos e agregações serem computados. Portanto, a cláusula WHERE não pode conter funções de agregação; não faz sentido tentar utilizar uma agregação para determinar quais linhas serão a entrada da agregação. Por outro lado, a cláusula HAVING sempre possui função de agregação (Falando estritamente, é permitido escrever uma cláusula HAVING que não possua agregação, mas é desperdício: A mesma condição poderia ser utilizada de forma mais eficiente no estágio do WHERE).
Observe que a restrição indicada poderia ser colocada na cláusula WHERE, porque não necessita de nenhuma agregação. É mais eficiente que colocar a restrição na cláusula HAVING, porque evita fazer os procedimentos de agrupamento e agregação para todas as linhas que não atendem a cláusula WHERE. [/quote:c7bd357a68]