Ir ao conteúdo
  • Cadastre-se

SQL !! - somando campos e transferindo o valor para outro


Diego.AS.

Posts recomendados

Ola

Bem estou com um projeto de um banco, só que

preciso que o seguinte aconteça

1º O valor do campo 1 da tabela 1 -(meno) o valor do campo2 da tabela 2

2º esse valor deve ser automaticamente transferido para o campo 3 da tabela 3

DETALHE: Quando um SELECT*FROM for rodado esse valor aparecera altomaticamente, ou seja, ele não vai ser inserido como os outros pelo INSERT INTO TABELA3 VALUES();

Uma especie de:

Sum(campo1) - sum tabela(campo2)

from tabela1,tabela2

mas tentei e não deu certo, a conta nunca dava certo

Link para o comentário
Compartilhar em outros sites

Olá,

tente especificar melhor o que são essas tabelas.... primeiro entendi que queria inserir o retorno do select na tabela 3, depois me pareceu que não é isso que você quer...

teste isso, é pra dar certo

FAZENDO O SELECT

SELECT CAMPO1,CAMPO2,CAMPO1-CAMPO2 AS SOMA FROM (
SELECT T1.VALOR AS CAMPO1,T2.VALOR AS CAMPO2 FROM TABELA01 AS T1
INNER JOIN TABELA02 AS T2 ON T2.CHAVE = T1.CHAVE
WHERE T1.VALOR > 0)
AS RETORNO

INSERINDO

INSERT INTO TABELA03 (CAMPO...) SELECT CAMPO1-CAMPO2 AS SOMA FROM (
SELECT T1.VALOR AS CAMPO1,T2.VALOR AS CAMPO2 FROM TABELA01 AS T1
INNER JOIN TABELA02 AS T2 ON T2.CHAVE = T1.CHAVE
WHERE T1.VALOR > 0)
AS RETORNO

Link para o comentário
Compartilhar em outros sites

Não sei te explicar direito o porque (nem a mim mesmo ^^), mas dessa forma

pra cada registro na tabela01, ele irá exibir todos da tabela02

ou seja, se tabela01 tem 10 registro e tabela02 tem 20

ele irá exibir um total de 10 * 20 registro, que é igual a 200 ^^

se eu estiver errado, alguém me corrija ou explique, plz

Link para o comentário
Compartilhar em outros sites

bem deve ser algo relacionado a isso mesmo.

Estou agora com outro problema, relativamente simples para alguns, quero agrupar os dados e calcular apenas os que forem iguais a um campo x

exemplificando:

daria algo parecido com isso:

se E.nome_prod = S.nome_prod então

faça Quant_Prod = Quant_Entrada - Quant saida

fim se

Link para o comentário
Compartilhar em outros sites

Bom dia, fiz este trecho baseado em duas tabelas de produtos, uma de cada usuário para exemplificar..


SELECT T1.CODIGO //codigo tabela 01
,T1.DESC //decrição
,T1.QTDEEN //qtde.entrada
,T1.QTDESD //qt.saida
,T1.QTDEEN - T1.QTDESD AS T1SOMA //aqui é o saldo atual
,T2.CODIGO //esse codigo é para ser sempre igual ao da tabela 01, devido ao INNER JOIN
,T2.DESC //
,T2.QTDEEN //
,T2.QTDESD //
,T2.QTDEEN - T2.QTDESD AS T2SOMA //
,T1SOMA+T2SOMA AS QTDEGERAL //creio que isso não dara erro, mas teste ^^
FROM PROD01 AS T1
INNER JOIN PROD02 AS T2 ON T2.CODIGO = T1.CODIGO

creio que seja só você modificar para sua necessidade (é bem simples mesmo, se entendi o que voce pediu...)

Link para o comentário
Compartilhar em outros sites

Bem...

Não sei eu não entendi direito ou o contrario, mas vou tentar explicar melhor

Eu quero que todos os registro da Coluna NOME_PROD da tabela ENTRADA

e todos os registro que forem iguais (=) na coluna NOME_PROD da tabela SAIDA

façam o seguinte conta

Quantidade de Entrada - Quant Saida

tx977m32zv869objyk3m.jpg

Link para o comentário
Compartilhar em outros sites


SELECT PRODUTO,SUM(IF(ID = 1,QTDE,QTDE*-1)) FROM (
SELECT 1 AS ID,PRODUTO,SUM(QTDE) AS QTDE FROM TAB_ENTRADA
GROUP BY PRODUTO
UNION ALL
SELECT 2 AS ID,PRODUTO,SUM(QTDE) AS QTDE FROM TAB_SAIDA
GROUP BY PRODUTO
) AS S1
GROUP BY S1.PRODUTO

tente isso, o primeiro select interno é na tabela de entrada, que vai retornar os produtos somados, ou seja, a quantia total de cada produto

o segundo select interno é na tabela de saida, que vai retornar os produtos somados, ou seja, a quantia total de cada produto

o select EXTERNO, é para somar os produtos iguais retornados de cada select, que seria a sua TABELA ESTOQUE

não testei nem nada, mas creio que esteja certo ^^

faça os select separadamente pra voce entender o que cada um está fazendo....

Link para o comentário
Compartilhar em outros sites

testou o codigo? deu certo?

estou selecionando a qtde da tabela de entrada e da tabela de saída...

como ambos os dados são positivos, então eu faço o SUM dessa forma

se ID = 1, que é entrada, soma a qtde como está

se ID = 2, que é saída, multiplica por -1, q seria deixar negativo para aí somar

lembrando q a coluna ID, criei para saber se o dado retornado é da tabela de entrada ou de saída

se não entendeu fala aí ^^

e lembrando, fiz o código de cabeça aqui, nem testei... qq coisa fala ae

Link para o comentário
Compartilhar em outros sites

OBS: Ainda não testei porque to sem acesso ao SQL ou outros SGBD, mas logo testo

por isso ja estou querendo tirar as duvidas

rs

Bem o que eu não compreendo é o seguinte

na minha tabela cada produto tem um código

Então ao invés de colocar ID eu colocaria Cod_Produto?

Mas se eu coloca-se Cod_Produto não iria dar errado? porque ele, pelo que eu entendi, só iria pegar os produtos cujo o código é 1 ou não?

:confused::confused::confused::confused:

A ESTRUTURA DA TABELA:


CREATE DATABASE ESTOQUE;
GO
USE ESTOQUE;
SET DATEFORMAT DMY;

--1º TABELA
CREATE TABLE PRODUTO
(
Cod_Produto INT,
Nome_Produto varchar(50) unique,
CONSTRAINT PK_Cod_Produto PRIMARY KEY (Cod_Produto)
);

--2º TABELA
CREATE TABLE Q_ESTOQUE
(
Cod_Produto INT NULL,
Nome_Produto varchar(50) NULL,
QUTD_Produto INT NULL, [B]-- (QUANTIDADE DE ENTRADA) - (A DE SAIDA)[/B]

CONSTRAINT FK_Q_ESTOQUE_Produto FOREIGN KEY(Nome_Produto)
REFERENCES PRODUTO(Nome_Produto)
);


--3º TABELA
CREATE TABLE ENTRADA
(
Cod_Produto INT,
Nome_Produto varchar(50),
Quant_Entrada INT NOT NULL,
Data_Entrada DATE,

CONSTRAINT CK_Data_Entrada
CHECK(Data_Entrada < getdate()),
CONSTRAINT FK_ENTRADA_PRODUTO FOREIGN KEY(Nome_Produto)
REFERENCES PRODUTO(Nome_Produto)
);

--4º TABELA
CREATE TABLE SAIDA
(
Cod_Prod INT,
Nome_Produto varchar(50),
Quant_Saida INT NOT NULL,
Data_Saida DATE NOT NULL,

CONSTRAINT CK_Data_Saida
CHECK (Data_Saida < GETDATE()),
CONSTRAINT FK_SAIDA_PRODUTO FOREIGN KEY(Nome_Produto)
REFERENCES PRODUTO(Nome_Produto)
);

Link para o comentário
Compartilhar em outros sites

a coluna ID, foi eu que criei...... isso você não vai mexer

o select para sua estrutura vai ficar assim....


SELECT PRODUTO,SUM(IF(ID = 1,QTDE,QTDE*-1)) FROM (
SELECT 1 AS ID,Cod_Produto AS PRODUTO,SUM(Quant_Entrada) AS QTDE FROM ENTRADA
GROUP BY PRODUTO
UNION ALL
SELECT 2 AS ID,Cod_Prod AS PRODUTO,SUM(Quant_Saida) AS QTDE FROM SAIDA
GROUP BY PRODUTO
) AS S1
GROUP BY S1.PRODUTO

o que é essa tabela Q_ESTOQUE??

geralmente, tabela de movimentação de produto, é a mesma tanto para entradas como para saídas

eu acredito q o ideal é ter essa tabela de MOVIMENTACAO para saber o que representa aquela entrada ou saida

e na tabela de produtos, voce ter a quantidade em estoque,

aí você tem q em todos os programas onde grava uma entrada ou uma saida, atualizar esse campo da tabela de PRODUTOS, só comentário ^^

Link para o comentário
Compartilhar em outros sites

a tabela Q_ESTOQUE é onde vai ser armazenado o valor da conta:

Quantidade_Entrada - Quantidade_Saida

E não ta funcionando aqui, fica acusando um monte de erros e eu ja tentei alterar na tabela e não deu certo

Tentei umas coisas e to quase


SELECT Nome_Produto AS PRODUTO,Cod_Produto AS CODIGO,SUM(Quant_Entrada) AS QTDE FROM ENTRADA
GROUP BY Nome_Produto, Cod_Produto
UNION ALL
SELECT Nome_Produto AS PRODUTO,Cod_Prod AS CODIGO,SUM(Quant_Saida) AS QTDE FROM SAIDA
GROUP BY Nome_Produto, Cod_Prod

Só falta agrupar os iguais que ele vai fazer o que eu quero

Link para o comentário
Compartilhar em outros sites

a tabela Q_ESTOQUE é onde vai ser armazenado o valor da conta:

Quantidade_Entrada - Quantidade_Saida

E não ta funcionando aqui, fica acusando um monte de erros e eu ja tentei alterar na tabela e não deu certo

Tentei umas coisas e to quase


SELECT Nome_Produto AS PRODUTO,Cod_Produto AS CODIGO,SUM(Quant_Entrada) AS QTDE FROM ENTRADA
GROUP BY Nome_Produto, Cod_Produto
UNION ALL
SELECT Nome_Produto AS PRODUTO,Cod_Prod AS CODIGO,SUM(Quant_Saida) AS QTDE FROM SAIDA
GROUP BY Nome_Produto, Cod_Prod

Só falta agrupar os iguais que ele vai fazer o que eu quero

Olá, testei aqui e funcionou perfeitamente.....

pelo que vi, você trata o campo DESCRIÇÃO DO PRODUTO como chave primária, então o certo seria isso.....


SELECT NOME,PRODUTO,SUM(IF(ID = 1,QTDE,QTDE*-1)) FROM (
SELECT 1 AS ID,Nome_Produto AS NOME,Cod_Produto AS PRODUTO,SUM(Quant_Entrada) AS QTDE FROM ENTRADA
GROUP BY NOME
UNION ALL
SELECT 2 AS ID,Nome_Produto AS NOME,Cod_Prod AS PRODUTO,SUM(Quant_Saida) AS QTDE FROM SAIDA
GROUP BY NOME
) AS S1
GROUP BY S1.NOME

que erro está dando?? poste aí qq coisa

Link para o comentário
Compartilhar em outros sites

Arquivado

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

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!