Calculo entre duas tabelas

5 respostas
programaçãojavamysql
D

Olá pessoal estou fazendo uma aplicação de contas a pagar e receber, preciso retornar um saldo de duas tabelas no Mysql, por exemplo, tenho um tabela de contas a receber com uma coluna valor_rec, e um tabela de contas a pagar com uma coluna valor_pag, na minha aplicação preciso retornar o valor final, por exemplo, tenho que somar todos os valores da coluna valor_rec e somar todos os valores da coluna valor_pag e depois subtrair as duas e retornar um valor final, contudo não estou conseguindo.

minha query está assim e até retorna um valor correto quando faço um select com inner join, porém ele só faz o calculo dos registros que tem um id igual.

select tbl_c_receber.valor_rec, tbl_c_pagar.valor_pag, (sum(valor_rec) - sum(valor_pag)) as Total
from tbl_c_receber inner join tbl_c_pagar
where tbl_c_receber.id_receber = tbl_c_pagar.id_pagar;

ou seja, esse resultado ignora outros valores que não tem ids iguais nas tabelas.

5 Respostas

campelo.m

No lugar do inner voce deve usar o left.

veja a diferaça entre inner-cross-left-rigth-e-full-joins

D

Eu já tentei fazer isso e dá o mesmo problema, a questão é que com Join desta forma eu faço a comparação com o id, porém em uma tabela vamos supor tem dois registros e na segunda só tem um registro, então ele retorna o calculo do primeiro registro de cada tabela, e outra tentei fazer de outra forma, a query até faz o calculos de todos os registro, porém ele duplica o resultado, por exemplo: o resultado é pra dá 300, porém o resultado é apresentado 600.

campelo.m

Você nem abriu o link que te mandei,

create table contasAPagar (
	id numeric not null,
	dataPagamento date,
	valorPagar numeric(14,2),
	constraint contasAPagar_key primary key (id)
);

create table contasAReceber (
	id numeric not null,
	dataRecebimento date,
	valorReceber numeric(14,2),
	constraint contasAReceber_key primary key (id)
);

insert into contasAPagar(id, dataPagamento, valorPagar) values(1, '2016-12-02', 25.5);
insert into contasAPagar(id, dataPagamento, valorPagar) values(2, '2016-11-02', 50.0);
insert into contasAPagar(id, dataPagamento, valorPagar) values(3, '2016-10-02', 45.0);
insert into contasAPagar(id, dataPagamento, valorPagar) values(4, '2016-09-02', 20.5);
insert into contasAPagar(id, dataPagamento, valorPagar) values(5, '2016-08-02', 105.5);
insert into contasAPagar(id, dataPagamento, valorPagar) values(6, '2016-07-02', 5.5);

insert into contasAReceber(id, dataRecebimento, valorReceber) values(1, '2016-12-02', 5.5);
insert into contasAReceber(id, dataRecebimento, valorReceber) values(2, '2016-05-02', 15.5);


select p.valorPagar, r.valorReceber, sum(coalesce(p.valorPagar,0) + coalesce(r.valorReceber,0)) as total 
from contasAReceber as r 
full join contasAPagar as p on p.id = r.id
group by p.valorPagar, r.valorReceber;

resultado:

D

Não tinha visto o link. rsrs, muito interessante, porém ainda não é o que eu quero, pois preciso que seja somado todos os registros juntos da tabela receber, e depois somar todos os valores juntos da tabela pagar, e depois subtrair uma pela outra.
por exemplo:
tabela receber:

1 | salario | 500
2 | hora extra | 500

tabela pagar:

1 | cartao de credito | 500

ai fazer o calculo :

contas a receber - total: 1000 reais
contas a pagar - total :500 reais

calculo: 1000 - 500

Saldo : 500 reais.

ou seja, preciso que apareça apenas um campo com o resultado total, pois vou mostrar esse resultado em campo no meu sistema que estou fazendo.

campelo.m

Faça sql separados buscando os resultados que voce precisa ou trabalhe com “views” ou com “with

Criado 1 de dezembro de 2016
Ultima resposta 5 de dez. de 2016
Respostas 5
Participantes 2