soma na busca
Estou tendo problemas para realizar a seguinte consulta:
- Tenho N notas fiscais com Y produtos cada. Preciso listar todas as notas fiscais com seus produtos e a soma de produtos por nota fiscal. P.e.:
Serial: 25, NF: 30, Total: 3
Serial: 26, NF: 30, Total: 3
Serial: 27, NF: 30, Total: 3
Serial: 28: NF: 31, Total: 2
Serial: 29, NF: 31, Total: 2
E assim por diante. É claro que a query é mais complexa que isso:
SELECT
Fornecedor.name,
MovimentoProduto.nota_fiscal,
DATE_FORMAT(MovimentoProduto.data_notafiscal,'%d/%c/%Y') AS 'data',
SUM((CASE WHEN MovimentoProduto.nota_fiscal = MovimentoProduto.nota_fiscal THEN 1 ELSE 0 END)) AS Total,
MovimentoIIS.iis
FROM movimento_produtos AS MovimentoProduto
LEFT JOIN fornecedores AS Fornecedor
ON Fornecedor.id = MovimentoProduto.fornecedor_id
LEFT JOIN movimento_produtos_itens AS MovimentoProdutoItem
ON MovimentoProdutoItem.movimento_produto_id = MovimentoProduto.id
LEFT JOIN produtos AS Produto
ON Produto.id = MovimentoProdutoItem.produto_id
LEFT JOIN movimento_iis AS MovimentoIIS
ON MovimentoIIS.movimento_produtos_item_id = MovimentoProdutoItem.id
WHERE (MONTH(MovimentoProduto.data_movimento) = 11) AND (YEAR(MovimentoProduto.data_movimento) = 2013)
AND MovimentoProduto.tipo = "entrada"
AND MovimentoProduto.empresa_id = 10
AND MovimentoProduto.status = "ativo"
AND Produto.id = 19
GROUP BY MovimentoIIS.iis HAVING COUNT(MovimentoIIS.iis)
ORDER BY MovimentoProduto.data_notafiscal,MovimentoProduto.nota_fiscal,MovimentoProduto.data_movimento
No SUM() tentei fazer uma comparação "ridícula" na esperança de "se nota fiscal = nota fiscal, então soma, se não, não faz nada". Eu poderia realizar essa conta em outra query, mas por questões de performance achei melhor fazer tudo em uma somente (essa consulta retorna mais de 60 mil linhas).
Alguém tem alguma sugestão para melhorar essa consulta e trazer o resultado que preciso?
Discussão (16)
Carregando comentários...