Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Boa noite, preciso de ajuda pois não seu por onde começar:
Partindo dessas 3 tabelas:
Tabela 1:
CREATE TABLE `tbl_cat_estoque` (
`Cod` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 'Atenção ao campo CHAR',
`Transacao` VARCHAR(100) NOT NULL,
`Descricao` TEXT NOT NULL,
PRIMARY KEY (`Cod`),
UNIQUE INDEX `Matricula` (`Transacao`)
)
COLLATE='utf8_general_ci'
ENGINE=InnoDB
AUTO_INCREMENT=2
;
Tabela 2:
CREATE TABLE `tbl_estoque` (
`Cod` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT,
`Dia` DATE NOT NULL,
`Filial` INT(10) UNSIGNED NOT NULL,
`Transacao` INT(10) UNSIGNED NOT NULL,
`Produto` INT(10) UNSIGNED NOT NULL,
`Cliente_Fornecedor` INT(10) UNSIGNED NOT NULL,
`Descricao` VARCHAR(100) NULL DEFAULT NULL,
`Quantidade` INT(11) NOT NULL,
`Validade` DATE NULL DEFAULT NULL,
`Efetivado` ENUM('S','N') NOT NULL,
`N_Controle` INT(11) NULL DEFAULT NULL,
PRIMARY KEY (`Cod`),
UNIQUE INDEX `N_Controle` (`N_Controle`),
INDEX `FK_Produto` (`Produto`),
INDEX `FK2_Trans_Estoque` (`Transacao`),
INDEX `FK_Contatos` (`Cliente_Fornecedor`),
INDEX `FK4_Filial` (`Filial`),
CONSTRAINT `FK2_Trans_Estoque` FOREIGN KEY (`Transacao`) REFERENCES `tbl_cat_estoque` (`Cod`),
CONSTRAINT `FK_Produto` FOREIGN KEY (`Produto`) REFERENCES `tbl_produtos` (`Cod`)
)
COLLATE='utf8_general_ci'
ENGINE=InnoDB
AUTO_INCREMENT=758
;
Tabela 3:
CREATE TABLE `tbl_produtos` (
`Cod` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
`Produto` VARCHAR(250) NOT NULL,
`Preco_Custo` FLOAT(10,2) NOT NULL,
`Fornecedor` INT(10) UNSIGNED NOT NULL,
`Grupo` INT(10) UNSIGNED NOT NULL,
`Informacoes` TEXT NULL,
`Preco` DECIMAL(10,2) NOT NULL,
`Esgotado` ENUM('S','N') NOT NULL DEFAULT 'N',
PRIMARY KEY (`Cod`),
UNIQUE INDEX `Produto` (`Produto`),
INDEX `FK_fornecedor` (`Fornecedor`),
INDEX `FK2_Grupo` (`Grupo`)
)
COLLATE='utf8_general_ci'
ENGINE=InnoDB
AUTO_INCREMENT=163
;
Preciso de uma query que retorne todos os produtos cadastrados e suas respectivas quantidades em estoque. Sendo que o campo "Transacao' presente em tbl_estoque e quem diferencia uma entrada de uma saída de mercadorias. - Meus conhecimentos me levaram até aqui:
SELECT
tbl_estoque.Produto AS Cod_Produto,
tbl_produtos.Produto AS Produto,
tbl_cat_estoque.Transacao AS Transacao,
(case when (tbl_cat_estoque.Transacao like '1%') then sum(tbl_estoque.Quantidade) else 0 end) AS Entradas,
(case when (tbl_cat_estoque.Transacao LIKE '2%') then sum(tbl_estoque.Quantidade) else 0 end) AS Saidas
from tbl_estoque
join tbl_cat_estoque ON (tbl_estoque.Transacao = tbl_cat_estoque.Cod)
JOIN tbl_produtos ON (tbl_estoque.Produto = tbl_produtos.Cod)
group by tbl_estoque.Transacao;
Agradeço toda ajuda que receber.Obrigado ShadowDLL - resolveu meu problema.
Disponível ;)
Gostaria de adicionar uma coluna calculada baseada no seguinte código
SELECT
tbl_estoque.Produto AS Cod_Produto,
tbl_produtos.Produto AS Produto,
tbl_estoque.Transacao AS Cod_Transacao,
tbl_cat_estoque.Transacao AS Transacao,
(CASE WHEN (tbl_cat_estoque.Transacao LIKE '1%') THEN SUM(tbl_estoque.Quantidade) ELSE 0 END) AS Entradas,
(CASE WHEN (tbl_cat_estoque.Transacao LIKE '2%') THEN SUM(tbl_estoque.Quantidade) ELSE 0 END) AS Saidas,
/*--------------------------------------------------------------------------------*/
(SELECT Entradas-Saidas) AS Saldo /*estou tendo problemas aqui*/
/*--------------------------------------------------------------------------------*/
FROM
tbl_estoque
JOIN tbl_cat_estoque ON (tbl_estoque.Transacao = tbl_cat_estoque.Cod)
JOIN tbl_produtos ON (tbl_estoque.Produto = tbl_produtos.Cod)
GROUP BY tbl_estoque.Produto;
Como resolver? Obrigado.SELECT
tbl_estoque.Produto AS Cod_Produto,
tbl_produtos.Produto AS Produto,
tbl_estoque.Transacao AS Cod_Transacao,
tbl_cat_estoque.Transacao AS Transacao,
(CASE WHEN (tbl_cat_estoque.Transacao LIKE '1%') THEN SUM(tbl_estoque.Quantidade) ELSE 0 END) AS Entradas,
(CASE WHEN (tbl_cat_estoque.Transacao LIKE '2%') THEN SUM(tbl_estoque.Quantidade) ELSE 0 END) AS Saidas,
/*------------------------deve resolver--------------------------------------------------------*/
( (CASE WHEN (tbl_cat_estoque.Transacao LIKE '1%') THEN SUM(tbl_estoque.Quantidade) ELSE 0 END) -
(CASE WHEN (tbl_cat_estoque.Transacao LIKE '2%') THEN SUM(tbl_estoque.Quantidade) ELSE 0 END) ) as total
/*--------------------------------------------------------------------------------*/
FROM
tbl_estoque
JOIN tbl_cat_estoque ON (tbl_estoque.Transacao = tbl_cat_estoque.Cod)
JOIN tbl_produtos ON (tbl_estoque.Produto = tbl_produtos.Cod)
GROUP BY tbl_estoque.Produto;Obrigado Motta.
O resultado está errado. A seguinte query soma todas as entradas na tabela estoque como saída.
SELECT
tbl_estoque.Produto AS Cod_Produto,
tbl_produtos.Produto AS Produto,
tbl_estoque.Transacao AS Cod_Transacao,
tbl_cat_estoque.Transacao AS Transacao,
(CASE WHEN (tbl_cat_estoque.Transacao LIKE '1%') THEN SUM(tbl_estoque.Quantidade) ELSE 0 END) AS Entradas,
(CASE WHEN (tbl_cat_estoque.Transacao LIKE '2%') THEN SUM(tbl_estoque.Quantidade) ELSE 0 END) AS Saidas,
(
(CASE WHEN (tbl_cat_estoque.Transacao LIKE '1%') THEN SUM(tbl_estoque.Quantidade) ELSE 0 END) -
(CASE WHEN (tbl_cat_estoque.Transacao LIKE '2%') THEN SUM(tbl_estoque.Quantidade) ELSE 0 END)
) as Saldo
FROM
tbl_estoque
JOIN tbl_cat_estoque ON (tbl_estoque.Transacao = tbl_cat_estoque.Cod)
JOIN tbl_produtos ON (tbl_estoque.Produto = tbl_produtos.Cod)
GROUP BY tbl_estoque.Produto;
Abaixo o print do resultado obtido:

>
10 horas atrás, janir.matheus disse:
Preciso de uma query que retorne todos os produtos cadastrados e suas respectivas quantidades em estoque. Sendo que o campo "Transacao' presente em tbl_estoque e quem diferencia uma entrada de uma saída de mercadorias. - Meus conhecimentos me levaram até aqui:
Sem mais, segue código:
SQLs A SER UTILIZADAS
( '1', 'Descricao 1' ), ( 'Televisor', 3000, 1, 1, 'Televisor HD', 4000 ), ( 'Radio', 1000, 2, 2, 'Radio HD', 2000 ), ( 'Radio a Pilha', 4000, 2, 2, 'Radio a Pilha HD', 5000 ), ( '2017-03-18', 1, 1, 1, 1, 'Algo', 10, NULL, 'S', 1112 ), ( '2017-04-28', 1, 2, 2, 2, 'Algo', 20, NULL, 'N', 1200 ), ( '2017-04-30', 1, 2, 3, 2, 'Algo', 30, NULL, 'N', 1331 ), ( '2018-04-20', 1, 1, 4, 3, 'Algo', 40, NULL, 'S', 2122 ), ( '2017-04-30', 1, 2, 3, 2, 'Algo', 30, NULL, 'N', 1332 ), ( '2017-03-18', 1, 1, 1, 1, 'Algo', 10, NULL, 'S', 1113 );QUERY
FROM tbl_estoque JOIN tbl_cat_estoque ON (tbl_estoque.Transacao = tbl_cat_estoque.Cod) JOIN tbl_produtos ON (tbl_estoque.Produto = tbl_produtos.Cod) GROUP BY tbl_estoque.ProdutoRESULTADO
/monthly_2019_08/image.png.49abe9bd5724ac524e162caef0940935.png" />