SUM INNER JOIN

MOREIRA 14/03/2016 20:24:37
#459179
boa noite a todos,

preciso somar as compras do cliente x

estou relacionando à duas tabelas compras e pagamentos

mas nesse caso aqui, só existe compras com id do cliente apenas em na tabela compras..

não esta me retornando a soma das compras

BDFIREBIRD

 Set Rst = New ADODB.Recordset
Sql = [Ô]SELECT C.IDCLIENTE, COALESCE(SUM(C.VLRLANCTO - P.VLRLANCTO), 0) AS TotalDebito FROM TB_CLIENTE_PAGTO P INNER JOIN TB_CLIENTE_COMPR C ON P.IDCLIENTE = C.IDCLIENTE WHERE C.IDCLIENTE =[ô][Ô] & IDCliente & [Ô][ô] GROUP BY C.IDCLIENTE[Ô]
Rst.Open Sql, Cnn, 3
If Rst.RecordCount > 0 Then
LblValorPend.Caption = Format(Rst!TotalDebito, [Ô]###,##0.00[Ô])
End If

KERPLUNK 14/03/2016 21:52:43
#459188
Se o ID do cliente só existe em uma tabela, como você vai ligar as duas? Mostre a estrutura delas que vamos pensar em alguma maneira de fazer o que você quer.
MOREIRA 14/03/2016 22:01:27
#459189
  CREATE TABLE TB_CLIENTE_COMPR (
ID INTEGER NOT NULL,
IDCLIENTE INTEGER DEFAULT 0,
NOMECLIENTE VARCHAR(150),
VLRLANCTO DM_DINHEIRO DEFAULT 0,
DTLANCTO DM_DATA,
NUMDOCTO VARCHAR(50),
TIPOLANCTO INTEGER,
DT_INC TIMESTAMP DEFAULT current_timestamp,
IDUSER INTEGER,
/* Keys */
CONSTRAINT PK_TB_CLIENTE_COMPR
PRIMARY KEY (ID)
);




CREATE TABLE TB_CLIENTE_PAGTO (
ID INTEGER NOT NULL,
IDCLIENTE INTEGER DEFAULT 0,
NOMECLIENTE VARCHAR(150),
VLRLANCTO DM_DINHEIRO DEFAULT 0,
DTLANCTO DM_DATA,
NUMDOCTO VARCHAR(50),
STATUSLANCTO INTEGER DEFAULT 0,
TIPOLANCTO DM_TXT2 DEFAULT [ô]P[ô],
DT_INC TIMESTAMP DEFAULT current_timestamp,
IDUSER INTEGER DEFAULT 0,
/* Keys */
CONSTRAINT PK_TB_CLIENTE_PAGTO
PRIMARY KEY (ID)
);



Só existe em uma tabela se o cliente fizer apenas compras, não efetuou nem um pagamento..
KERPLUNK 14/03/2016 22:12:21
#459190
Hmmm, que tal usar uma sub-query? Vai ser um pouco mais lento, mas mais simples.
JABA 14/03/2016 22:18:14
#459191
 WHERE C.IDCLIENTE =[txt-color=#e80000][ô][Ô][/txt-color] & IDCliente &[txt-color=#e80000] [Ô][ô][/txt-color] GROUP BY C.IDCLIENTE[Ô]


O campo idcliente da tabela TB_CLIENTE_COMPR é um numero inteiro e você está usando-o na parte da clausa where como string. Retire as aspas simples e veja se vai. Dessa forma;

WHERE C.IDCLIENTE =[Ô] & IDCliente & [Ô] GROUP BY C.IDCLIENTE[Ô]
MOREIRA 14/03/2016 22:23:34
#459192
nada, já havia retirado antes, e nada!!
KERPLUNK 14/03/2016 22:33:45
#459193
Tente:

Select IdCliente, NomeCliente, (select Sum(vlrlancto) from TB_CLIENTE_PAGTO where idcliente = c.idcliente) as Pagamentos from TB_CLIENTE_COMPR c Where....
Tópico encerrado , respostas não são mais permitidas