2
I have difficulties to mount an sql that returns the sum of the entries and the sum of the output correctly. I have the tables tbl_produtos(id_produto,NomeProduto)
, tbl_entradas_produtos(Id_produto,QuantProdutos,Estoque,ExcluirProdutoEnt)
, tbl_saidas_produtos(Id_produto,QuantProdutos,Estoque,ExcluirProdutoSaida)
This is the sql I’m using:
$sql = "SELECT p.NomeProduto, \n"
. "IFNULL(SUM(ep.QuantProdutos),0) as Entrada, \n"
. "IFNULL(SUM(sp.QuantProdutos),0) as Saida,\n"
. "(IFNULL(SUM(ep.QuantProdutos),0) - IFNULL(SUM(sp.QuantProdutos),0)) as Total\n"
. "FROM tbl_entradas_produtos ep \n"
. "inner join tbl_produtos p \n"
. "on (p.idProduto=ep.IdProduto and ep.ExcluirProdutoEnt=0 and ep.Estoque=$IdEstoque) \n"
. "left join tbl_saidas_produtos as sp \n"
. "on (sp.IdProduto = p.idProduto and sp.Estoque = $IdEstoque and sp.ExcluirProdutoSaida = 0)\n"
. "Group by p.NomeProduto";
The goal of this sql is to return:
- The first column with the product names;
- The 2nd column with the sum of the "Quantity and products" of all inputs of each product;
- The 3rd column with the sum of the "Quantity and products" of all outputs of each product;
- The 4th column and the Total (sum of the quantity of inputs - sum of the quantity of outputs)
But it returns me some duplicate records, like the example I simulated in my database, it should return me this:
NOME DO PRODUTO | ENTRADA | SAIDA | EM ESTOQUE
ALFACE | 105 | 40 | 65
BANANA | 50 | 0 | 50
CENOURA | 80 | 15 | 65
But this comes back to me:
NOME DO PRODUTO | ENTRADA | SAIDA | EM ESTOQUE
ALFACE | 105 | 80 | 25
BANANA | 50 | 0 | 50
CENOURA | 160 | 30 | 130
yes, I simulated with this query and could not find any alternative to achieve the correct values, this is exceeding my knowledge... In the bank I have the following lines that result in the example of the scenario I mentioned above...
tbl_entradas_produtos:
id | IdProduto | QuantProdutos | Estoque | ExcluirProdutoEnt
1 | 1 | 75 | 2 | 0
2 | 2 | 75 | 2 | 0
3 | 2 | 30 | 2 | 0
4 | 1 | 5 | 2 | 0
5 | 3 | 50 | 2 | 0
tbl_produtos:
idProduto | NomeProduto
1 | CENOURA
2 | ALFACE
3 | BANANA
tbl_saidas_produtos
id | IdProduto | QuantProdutos | Estoque | ExcluirProdutoSaida
1 | 1 | 10 | 2 | 0
2 | 2 | 40 | 2 | 0
3 | 1 | 5 | 2 | 0
Can provide the
DDL
in the sqlfiddle?– Marcelo de Andrade
You simulated this same query with this left Join ?
– Marco Souza