AJUDA COM SQL
Galera alguem pode me ajudar com esse SQL,
Preciso somar todos os valores referentes a um produto na tabela movimentos, mas não estou conseguindo, tentei usar o SUM(MOVIMENTOS.QUANTIDADE) mas da erro. o unico jeito que eu consegui foi pegar cada lançamento como no anexo, mas preciso somar.
Preciso somar todos os valores referentes a um produto na tabela movimentos, mas não estou conseguindo, tentei usar o SUM(MOVIMENTOS.QUANTIDADE) mas da erro. o unico jeito que eu consegui foi pegar cada lançamento como no anexo, mas preciso somar.
SELECT PRODUTOS.CODIGO,PRODUTOS.DESCRICAO,PRODUTOS.VALORVENDA,PRODUTOS.BLOQUEADO,
GRADES.CODIGOBARRAS,MOVIMENTOS.QUANTIDADE
FROM ((PRODUTOS
INNER JOIN GRADES ON PRODUTOS.CODIGO = GRADES.PRODUTO)
INNER JOIN MOVIMENTOS ON GRADES.CODIGO = MOVIMENTOS.PRODUTO)
para usar o SUM você tem que dar um Group BY...caso contrário não vai somar....
melhor ainda seria você fazer uma VIEW somando os valores...daà é só dar INNER JOIN na VIEW.....
Bom primeiramente deve nos informar qual o banco de dados você esta utilizando!
Ao meu ponto de vista é o ACCESS!
Ponto principais no query é que:
- se o valor da veda mudar a consulta ficará dividida
- se o status bloqueado a consulta ficara dividida
Mas valor lá. Usando a sua query você pode fazer o seguinte:
Primeiramente eu mudei o INNER JOIN da tabela MOVIMENTOS para o LEFT JOIN, pois você pode ter produtos que não entraram em movimentação e em um relatório você poderia não ter ele em lista;
Outra coisa que fiz foi dar codinome para as tabelas, pois assim você encurta a sua query;
E alem de utilizar o SUM() utilizei o group by para agrupar as outras colunas sem ele o SUM não terá efeito com outras colunas a mostra;
Espero ter ajudado
Ao meu ponto de vista é o ACCESS!
Ponto principais no query é que:
- se o valor da veda mudar a consulta ficará dividida
- se o status bloqueado a consulta ficara dividida
Mas valor lá. Usando a sua query você pode fazer o seguinte:
SELECT
P.CODIGO,P.DESCRICAO,P.VALORVENDA,P.BLOQUEADO,G.CODIGOBARRAS,SUM(M.QUANTIDADE) AS MVQUANT
FROM ((PRODUTOS AS P INNER JOIN GRADES AS G ON P.CODIGO = G.PRODUTO)
LEFT JOIN MOVIMENTOS AS M ON G.CODIGO = M.PRODUTO)
GROUP BY P.CODIGO,P.DESCRICAO,P.VALORVENDA,P.BLOQUEADO,G.CODIGOBARRAS
Primeiramente eu mudei o INNER JOIN da tabela MOVIMENTOS para o LEFT JOIN, pois você pode ter produtos que não entraram em movimentação e em um relatório você poderia não ter ele em lista;
Outra coisa que fiz foi dar codinome para as tabelas, pois assim você encurta a sua query;
E alem de utilizar o SUM() utilizei o group by para agrupar as outras colunas sem ele o SUM não terá efeito com outras colunas a mostra;
Espero ter ajudado
Filman, com base nas suas dicas eu mudei a sql mais ainda não consegui
segue o sql e um print de como esta saindo.
segue o sql e um print de como esta saindo.
SELECT P.codigo,P.descricao,P.valorvenda,P.bloqueado,E.quantidade
FROM produtos AS P
INNER JOIN grades AS G ON G.produto = P.codigo
LEFT JOIN (SELECT grade,SUM(quantidade)as quantidade
FROM estoque
WHERE excluido = 0
GROUP BY grade) AS E ON E.grade = G.codigo
WHERE P.excluido = 0
talvez vendo a estrutura das tabelas vocês consigam entender melhor
Tópico encerrado , respostas não são mais permitidas