Ir para conteúdo

Arquivado

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

janir.matheus

Ajuda com query mysql

Recommended Posts

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.

Compartilhar este post


Link para o post
Compartilhar em outros sites
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

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`)
);
INSERT INTO tbl_cat_estoque ( Transacao, Descricao ) VALUES
( '1', 'Descricao 1' ),
( '2', 'Descricao 2' );

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`)
);
INSERT INTO tbl_produtos ( Produto, Preco_Custo, Fornecedor, Grupo, Informacoes, Preco ) VALUES
( '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 ),
( 'Celular', 6000, 3, 3, 'Celular HD', 7000 );

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`)
);
INSERT INTO tbl_estoque ( Dia, Filial, Transacao, Produto, Cliente_Fornecedor, Descricao, Quantidade, Validade, Efetivado, N_Controle ) VALUES
( '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

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.Produto


RESULTADO

image.png.49abe9bd5724ac524e162caef0940935.png

Compartilhar este post


Link para o post
Compartilhar em outros sites

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.

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

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;

Compartilhar este post


Link para o post
Compartilhar em outros sites

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:

 

post-forum.jpg

Compartilhar este post


Link para o post
Compartilhar em outros sites

  • Conteúdo Similar

    • Por WebCorplfs
      Pessoal, bom dia,.. por gentileza alguem pode me dar uma ajuda:
      Preciso montar uma consulta que funcione da seguinte forma:
      SELECT distinct hora_ponto, data, pis FROM conferencia_ponto where pis = '013025727232' and data = '2017/01/30' que traz o seguinte resultado:
      hora_ponto   data     pis 07:40:00          30/01/2017 00:00:00       013025727232 10:59:00 30/01/2017 00:00:00 013025727232 12:56:00 30/01/2017 00:00:00 013025727232 17:25:00 30/01/2017 00:00:00 013025727232 * hora ponto é um campo que estou importando de um txt de relogio de ponto
      E outra  query com a seguinte estrutura e resultado :
      SELECT b.horario, a.data, a.pis FROM escala_individual as a, cadastro_horario_itens as b, cadastro_horarios as c where a.evento = b.codigo_horario and b.codigo_horario = c.codigo AND a.pis = '013025727232' and a.data = '2017/01/31' group by data, horario horario  data pis 07:30:00        31/01/2017 00:00:00       013025727232 12:00:00 31/01/2017 00:00:00 013025727232 13:00:00 31/01/2017 00:00:00 013025727232 17:00:00 31/01/2017 00:00:00 013025727232 * horario é o campo que parametrizei com as tabelas cadastro_horarios x cadastro_horario_itens, ou seja, sao horarios de trabalho pre definidos.
      nao consegui ate o momento montar uma query que me apresentasse da seguinte forma:
      horario hora_ponto         data pis 07:30:00      07:40:00        31/01/2017 00:00      13025727232 12:00:00 10:59:00        31/01/2017 00:00 13025727232 13:00:00 12:56:00        31/01/2017 00:00 13025727232 17:00:00 17:25:00        31/01/2017 00:00 13025727232 O problema que estou tendo é que ao trazer os registros com um join e as devidas clausulas where ele repete alguns valores devido a quantidade de registros na tabela cadsatro_horario_itens... nao sei se fui claro...
      alguem pode me ajudar?
×

Informação importante

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