SUBTRAIR VALORES ENTRE TABELAS
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
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
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
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
Mostre a estrutura das tabelas(ao menos os campos que te interessam)
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)
);
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?
CODIGO CLIENTE SALDO
----------- ---------------------------------------------------------------------------------------------------- ---------------------------------------
1 Cliente 1 30.00
2 Cliente 2 151.00
por acaso não tem valor null salvo nesses campos?
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.
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
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
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