Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

dead_thinker

Onde está o erro nesse SELECT?

Recommended Posts

Sinceramente, já penei aqui mas não to encontrando, não sei se o comportamento do MySQL com relação a JOINS é diferente de outros bancos, mas ta estranho.

Quem puder dar uma ajuda :D

 

O problema é que está retornando a quantidade vendida duplicado, caso tenham sido vendidos 43, retorna 86. :(

 

 

SELECT
	prod.PRODUTO_NOME,
   	prod.PRODUTO_QUANT_MIN_ESTOQUE AS QTDMinima,
   	prod.PRODUTO_QUANT_ESTOQUE AS QTDInicial,
	(
		IFNULL(SUM(compras.COMPRA_ITEM_QUANT), 0)
	) AS QTDComprada,
	(
		IFNULL(SUM(vendas.VENDA_ITEM_QUANT), 0)
	) AS QTDVendida,
	(
		IFNULL(
			/* Quantidade Comprada */
   			IFNULL(SUM(compras.COMPRA_ITEM_QUANT), 0) + IFNULL(prod.PRODUTO_QUANT_ESTOQUE, 0)
			-
			/* Quantidade Vendida */
			IFNULL(SUM(vendas.VENDA_ITEM_QUANT), 0)
		, 0)
	) AS QTDEmEstoque,
	(
		IF(
			(
				/* Quantidade Comprada */
	   			IFNULL(SUM(compras.COMPRA_ITEM_QUANT), 0) + IFNULL(prod.PRODUTO_QUANT_ESTOQUE, 0)
				-
				/* Quantidade Vendida */
				IFNULL(SUM(vendas.VENDA_ITEM_QUANT), 0)
			) < IFNULL(SUM(prod.PRODUTO_QUANT_MIN_ESTOQUE), 0), 'SIM', 'NAO')
	) AS ProdutoNoLimiteDeEstoque
FROM
	tbproduto AS prod
	   	LEFT OUTER JOIN tbvenda_item AS vendas ON prod.PRODUTO_COD = vendas.PRODUTO_COD
		LEFT OUTER JOIN tbcompra_item AS compras ON prod.PRODUTO_COD = compras.PRODUTO_COD
WHERE
   	prod.PRODUTO_QUANT_MIN_ESTOQUE IS NOT NULL
GROUP BY
	prod.PRODUTO_COD

Compartilhar este post


Link para o post
Compartilhar em outros sites

Detectei aqui que se existirem 2 compras pro produto, a venda aparece duplicada. Mas porque? :D

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pelo que andei vendo e conversando com uns amigos, parece ser erro do MySQL mesmo, vou ter que fazer mais de um select pra resolver.

 

Valew.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bem...a quem interessar possa, há uma solução, dada por um outro amigo ehhe. Segue o sql.

 

SELECT
	prod.PRODUTO_COD,
	QTDTotal.QTDEmEstoque,
	QTDVendida.QTDVendida,
	(QTDTotal.QTDEmEstoque - QTDVendida.QTDVendida) as Dif
FROM
	tbproduto AS prod
	INNER JOIN (
		SELECT
			prod.PRODUTO_COD,
			(
				IFNULL(SUM(compras.COMPRA_ITEM_QUANT), 0) + IFNULL(prod.PRODUTO_QUANT_ESTOQUE, 0)
			) AS QTDEmEstoque
		FROM
			tbproduto AS prod
				LEFT OUTER JOIN tbcompra_item AS compras ON prod.PRODUTO_COD = compras.PRODUTO_COD
		WHERE
			   prod.PRODUTO_QUANT_MIN_ESTOQUE IS NOT NULL
		GROUP BY
			prod.PRODUTO_COD
	) AS QTDTotal ON QTDTotal.PRODUTO_COD = prod.PRODUTO_COD
	INNER JOIN (
		SELECT
			prod.PRODUTO_COD,
			(
				IFNULL(SUM(vendas.VENDA_ITEM_QUANT), 0)
			) AS QTDVendida
		FROM
			tbproduto AS prod
				   LEFT OUTER JOIN tbvenda_item AS vendas ON prod.PRODUTO_COD = vendas.PRODUTO_COD
		WHERE
			   prod.PRODUTO_QUANT_MIN_ESTOQUE IS NOT NULL
		GROUP BY
			prod.PRODUTO_COD
	) AS QTDVendida ON QTDVendida.PRODUTO_COD = prod.PRODUTO_COD
/*WHERE
	   prod.PRODUTO_QUANT_MIN_ESTOQUE IS NOT NULL*/

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.