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

C

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.

C

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.

C

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