AJUDA COM SQL

CAIO.FR.SP 30/12/2013 11:40:29
#432528
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.

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)
F001E 30/12/2013 15:04:56
#432533
para usar o SUM você tem que dar um Group BY...caso contrário não vai somar....
F001E 30/12/2013 15:06:47
#432534
melhor ainda seria você fazer uma VIEW somando os valores...daí é só dar INNER JOIN na VIEW.....
FILMAN 30/12/2013 15:08:24
#432535
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:

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
CAIO.FR.SP 03/01/2014 09:34:53
#432609
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.

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
CAIO.FR.SP 03/01/2014 11:18:20
#432614
talvez vendo a estrutura das tabelas vocês consigam entender melhor
Tópico encerrado , respostas não são mais permitidas