SUBTRAIR VALORES ENTRE TABELAS

MOREIRA 27/11/2017 12:12:03
#478117
Bom dia, montei essa query para controlar pagamentos

Na tabela ClienteVenda é gravado as compras do cliente

Na tabelea ClientePagto é Gravado os Pagamentos

essa Query preciso retornar o SaldoDevedor do cliente

O que há de errado nessa query abaixo ?

Base De Dados FireBird 2.5

  SELECT CODIGO, CLIENTE (SELECT COALESCE(SUM(TBCLIENTEPAGTO.VALORPAGO - TBCLIENTEVENDA.TOTALPAGAR), 0) AS SALDO FROM TBCLIENTEVENDA WHERE TBCLIENTEPAGTO.CODIGOCLIENTE = TBCLIENTEVENDA.CODIGOCLIENTE) FROM TBCLIENTE WHERE CODIGO = 3 

LUIS2014 27/11/2017 13:20:22
#478118
não seria algo assim?

SELECT C.CODIGO, C.CLIENTE, COALESCE(SUM(CP.VALORPAGO -  CV.TOTALPAGAR),0) AS SALDO
FROM TBCLIETNE C
JOIN TBCLIENTEVENDA CV ON CV.CODIGOCLIENTE = C.CLIENTE
JOIN TBCLIENTEPAGTO CP ON CP.CODIGOCLIENTE = C.CLIENTE
WHERE C.CODIGO = 3
GROUP BY C.CODIGO, C.CLIENTE

MOREIRA 27/11/2017 17:02:50
#478120
Citação:

:
não seria algo assim?

SELECT C.CODIGO, C.CLIENTE, COALESCE(SUM(CP.VALORPAGO -  CV.TOTALPAGAR),0) AS SALDO
FROM TBCLIETNE C
JOIN TBCLIENTEVENDA CV ON CV.CODIGOCLIENTE = C.CLIENTE
JOIN TBCLIENTEPAGTO CP ON CP.CODIGOCLIENTE = C.CLIENTE
WHERE C.CODIGO = 3
GROUP BY C.CODIGO, C.CLIENTE


Seria pra retornar algum valor, ja que consta o codigo do cliente relacionado. Porem retorna valores null
KERPLUNK 27/11/2017 18:17:45
#478122
Mostre a estrutura das tabelas(ao menos os campos que te interessam)
MOREIRA 27/11/2017 18:34:15
#478123
Citação:

:
Mostre a estrutura das tabelas(ao menos os campos que te interessam)



  CREATE TABLE TBCLIENTEPAGTO (
CODIGO INTEGER NOT NULL,
CODIGOCLIENTE INTEGER DEFAULT 0,
VALORPAGO DECIMAL(15,2) DEFAULT 0,
DATAPAGTO DATE,
/* Keys */
PRIMARY KEY (CODIGO)
);



CREATE TABLE TBCLIENTEVENDA (
CODIGO INTEGER NOT NULL,
CODIGOCLIENTE INTEGER,
TOTALCOMPRA DECIMAL(15,2) DEFAULT 0,
TOTALPAGAR DECIMAL(15,2) DEFAULT 0,
JUROSCREDITO DECIMAL(15,2) DEFAULT 0,
TOTALPAGO DECIMAL(15,2) DEFAULT 0,
DTCOMPRA DATE,
CODIGOUSER INTEGER DEFAULT 0,
NUMEROTERMINAL INTEGER DEFAULT 0,
NUMERODOCTO VARCHAR(50),
DTVENCTO DATE,
QUANTPARC SMALLINT,
STATUS SMALLINT,
/* Keys */
CONSTRAINT PK_TBCLIENTEVENDA
PRIMARY KEY (CODIGO)
);



CREATE TABLE TBCLIENTE (
CODIGO INTEGER NOT NULL,
CLIENTE VARCHAR(100),
/* Keys */
CONSTRAINT PK_TBCLIENTE
PRIMARY KEY (CODIGO)
);
LUIS2014 28/11/2017 08:49:17
#478125
No teste aqui retornou.

CODIGO CLIENTE SALDO
----------- ---------------------------------------------------------------------------------------------------- ---------------------------------------
1 Cliente 1 30.00
2 Cliente 2 151.00

por acaso não tem valor null salvo nesses campos?
MOREIRA 28/11/2017 13:07:38
#478127
Citação:

:
No teste aqui retornou.

CODIGO CLIENTE SALDO
----------- ---------------------------------------------------------------------------------------------------- ---------------------------------------
1 Cliente 1 30.00
2 Cliente 2 151.00

por acaso não tem valor null salvo nesses campos?



Sim existe. Mas nao nos campos relacionados oi seja, codigo cliente, totalcompra e total pago. Tenhos valores nos campos nas duas tabelas.
MOREIRA 29/11/2017 00:04:18
#478136
Amigos, revendo a necessidade. Preciso efetuar o calculo existindo ou nao codigo do cliente relacionado na tabela clientepagto


  SELECT C.CODIGO, C.CLIENTE, C.CPFCNPJ, (SELECT COALESCE(SUM(CP.VALORPAGO) - (SELECT SUM(CV.TOTALPAGAR)
FROM TBCLIENTEVENDA CV), 0) TOTALDEBITO
FROM TBCLIENTEPAGTO CP)
FROM TBCLIENTE C
WHERE C.CODIGO = 3 GROUP BY C.CODIGO, C.CLIENTE, C.CPFCNPJ

MOREIRA 29/11/2017 15:36:55
#478144
Olá, boa tarde, consegui o resultado que preciso

alguma sugestão para melhorar para boas praticas

essa query.

A tabela cliente nao conseguir colocar como subquery

abrigado


  --SELECT C.CODIGO, C.CLIENTE, (SELECT SUM(CV.TOTALCOMPRA) - SUM(CV.TOTALPAGO) - (SELECT COALESCE(SUM(CP.VALORPAGO), 0)

--FROM TBCLIENTEPAGTO CP WHERE CP.CODIGOCLIENTE = 3)

--FROM TBCLIENTEVENDA CV WHERE CV.CODIGOCLIENTE = 3) AS TOTAL

--FROM TBCLIENTE C

--WHERE C.CODIGO = 3 GROUP BY C.CODIGO, C.CLIENTE

Tópico encerrado , respostas não são mais permitidas